具有动态数组的C中的分段错误



请帮助我查找动态内存分配中的错误。

有必要把所有以一个字母开头和结尾的单词都打印出来。

该算法适用于静态数组,但在尝试创建动态数组时出错。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int len = 0;
char str[10] = "aba cd geg ";
char* word = NULL;
int j = 0;
int i = 0;
int n = 0;
while(str[i]!='')
{
if(!isspace(str[i]))
{
n++;
word = (char*)realloc(word, (n* sizeof(char)));
word[j] = str[i];
j++;
len++;
}
else
{
if(word[0] == word[len-1])
{
j = 0;
while(j < len)
{
printf("%c", word[j]);
j++;
}
}
j = 0;
len = 0;
free(word);
n = 0;
}
i++;
}
return 0;
}

释放word后,需要将word设置为NULL,因为realloc只能在NULL指针或之前由malloccallocrealloc返回的有效指针上执行。

...
len = 0;
free(word);    // after this line, word is no more a valid pointer
word = NULL;   // <<<< insert this
n = 0;
...

换句话说,这种模式总是错误的:

free(foobar);
foobar = realloc(foobar, ...);

另一种可能性是根本不释放word,让下一个realloc来处理它,在这种情况下,这很可能更有效。

...
len = 0;
// free(word);     remove this line
n = 0;
...

但是您需要在程序结束时调用free(word);,就在return 0;之前

所以你的程序的结尾会是这样的:

...
j = 0;
len = 0;
n = 0;
}
i++;
}
free(word);
return 0;

相关内容

  • 没有找到相关文章

最新更新