我正在使用gdb调试程序,我得到一个分段错误

问题描述:

const char* text = str->text; 

这行代码是什么产生的错误在gdb中发现,它是在一个函数,显示一个字符串。我正在使用gdb调试程序,我得到一个分段错误

Tokens* createTokens(String* str, char delimiter) 
{ 
    int start_size = 1; 
    Tokens* tokens = initTokens(start_size); 
    int start = 0; 
    cout << tokens->sz << endl; 
    tokens->sz = 1; 
    while (start < tokens->sz) 
    { 
     for(int i = 0; i < str->sz; i++) 
     { 
      int end = find(str, delimiter, start); 
      str = substr(str, start, end); 
      addToken(tokens, str); 
      start = end; 
      tokens->sz ++; 
     } 
    } 


    return tokens; 

我相信这段代码是错误的起源。我不确定问题出在哪里。我是一个非常辛苦的介绍C++类的初学者程序员,所以我非常感谢他们的帮助。

+0

不知道如何声明'find'和'substr',很难说您是否传递了正确的参数。尽管你的代码中有几个明显的错误。首先你不检查'find'的返回值,所以如果没有找到字符串'substr'可能会失败。第二个'str = substr(...)'改变'str',所以它指向新提取的字符串,而不是传递给函数的原始字符串。你也不检查空指针值,oops! –

从一开始就检查你认为关于一段代码的所有事情。

在这种情况下,请检查str的值,然后检查str-> text。

我相信str被设置为NULL。您必须通过在程序中的早期和早期点检查其值来回溯。

如果你很幸运,你的gdb可以做反向执行。请参阅http://jayconrod.com/posts/28/tutorial-reverse-debugging-with-gdb-7https://sourceware.org/gdb/onlinedocs/gdb/Reverse-Execution.html