【发布时间】:2012-12-09 08:53:29
【问题描述】:
所以我的代码中出现了段错误,我似乎无法弄清楚是什么原因造成的。有人能捕捉到我没有捕捉到的东西吗?
从逻辑上讲,我试图通过将事物连接到末尾来创建一个 char 数组(一个字符串),然后将其添加到一个字符串数组中。
它最终应该是这个'word1、word2、word3、word4、word5...等'
段错误发生在strcat(str, ", ");
void save_ladder(graphNode *curNode) {
char *str = malloc(1000 * sizeof(char));
strcpy(str, "");
strcat(str, curNode->word);
strcat(str, ", ");
graphNode *prev = curNode->prevWord;
while (prev != NULL) {
if (prev->prevWord != NULL) {
strcat(str, prev->word);
strcat(str, ", "); // SEG FAULT HAPPENS HERE
}
else
strcat(str, prev->word);
prev = prev->prevWord;
}
ladders[numLadders++] = str;
}
gdb 堆栈跟踪:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004013d1 in save_ladder (curNode=0x6420f0) at wordladder.c:150
150 strcat(str, ", ");
有人知道为什么会这样吗?
【问题讨论】:
-
sizeof(char)始终为 1。并显示更多关于结构和为其内容分配内存的代码 - 问题可能在于这些。 -
您确定您使用的字符数不超过分配的 1000 个字符吗?在崩溃之前打印字符串的样子可能很有用。
-
这很可能是缓冲区溢出。您希望最终的字符串可以容纳 999 个字符吗?如果是这样,错误一定是您添加了更多的字符,这由您的链表决定。因此,结构。
-
使用调试器。看看你的变量。我们不能。
-
我将通过在 malloc 行上放置一个断点来开始调试此问题,并记下该值。然后检查,发生错误时str的值是否仍然相同。还要检查结果字符串是否小于 1000 个字符。