gpt4 book ai didi

c - 动态指针数组重新分配失败

转载 作者:行者123 更新时间:2023-11-30 15:53:08 27 4
gpt4 key购买 nike

我在重新分配时遇到问题。这是我的函数,它从输出中读取单词,并在检测到 EOF 时终止。该函数会导致内存泄漏,并且以下程序会抛出 SIGSEGV 或 SIGABORT。有什么问题吗?

int inx=0;
char **wordList=NULL;

int v;
char tmpArr[100];

do
{
v=scanf("%s",tmpArr);
if(v!=-1)
{
char* word=(char*)malloc(strlen(tmpArr)+1);
strcpy(word,tmpArr);
char**more=(char**)realloc(wordList,sizeof(char*)*(inx+1));
if(more!=NULL) {wordList=more;} else return 1;
wordList[inx++]=word;
printf("%d\n",inx);
}
}

最佳答案

v=scanf("%s",tmpArr); 

如果输入字符串大于 100,上述内容可能会导致内存覆盖。您可能需要使用 fgets(tmpArray,sizeof(tmpArray),stdin) 来将输入限制为最大缓冲区大小(或使用 scanf_s)。

你不应该强制转换 malloc 返回的内容,它返回一个不需要强制转换的 void*,如果你强制转换,如果你忘记包含 stdlib.h,你可能会掩盖错误

char* word = /* (char*) */ malloc(strlen(tmpArr)+1);

每次读取新字符串时增长数组并不是很有效,而是考虑分配一堆字符串指针或最好使用其他数据结构,例如一个列表

例如

if ( inx == maxindex  )
{
char**more=(char**)realloc(wordList,sizeof(char*)*(maxindex + bunch));

if (more != NULL)
{
wordList = more;
maxindex += bunch ;
}
else
{
return 1;
}
}

...

关于c - 动态指针数组重新分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13875604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com