我正在使用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++类的初学者程序员,所以我非常感谢他们的帮助。
答
从一开始就检查你认为关于一段代码的所有事情。
在这种情况下,请检查str的值,然后检查str-> text。
我相信str被设置为NULL。您必须通过在程序中的早期和早期点检查其值来回溯。
如果你很幸运,你的gdb可以做反向执行。请参阅http://jayconrod.com/posts/28/tutorial-reverse-debugging-with-gdb-7和https://sourceware.org/gdb/onlinedocs/gdb/Reverse-Execution.html
不知道如何声明'find'和'substr',很难说您是否传递了正确的参数。尽管你的代码中有几个明显的错误。首先你不检查'find'的返回值,所以如果没有找到字符串'substr'可能会失败。第二个'str = substr(...)'改变'str',所以它指向新提取的字符串,而不是传递给函数的原始字符串。你也不检查空指针值,oops! –