【发布时间】:2015-04-23 01:25:06
【问题描述】:
我正在尝试将char word[50] 数组复制到char **wordlist 双指针,然后将realloc(wordlist, (numwords+1)*sizeof(char*)) 以将单词列表的大小再增加一个char* 以容纳下一个word。
我不断收到*** glibc detected *** ./program: realloc(): invalid next size 错误
我将其声明为wordlist = realloc(wordlist, (numwords+1)*sizeof(char*))
void outFile(char *argv[], char **wordlist)
{
if((inFilePtr = fopen(argv[2], "r")) != NULL)
{
if((outFilePtr = fopen(endOfFile, "w")) != NULL)
{
while((c = fgetc(inFilePtr)) != EOF)
{
if(!(isspace(c)))
{
word[wordIndex] = c;
wordIndex++;
rowLim++;
}
if(isspace(c))
{
wordIndex = 0;
if(rowLim < limit)
{
rowLim++;
strcat(text[rowNum], word);
strcat(text[rowNum], " \0");
wordlist[numwords] = strdup(word);
/*strcat(wordlist[numwords], "\n\0");*/
memset(word, 0, 50);
prev = rowLim;
wordlist = realloc(wordlist, (numwords + 1)*sizeof(char*));
numwords++;
}
else
{
strcat(text[rowNum], "\n\0");
printf("text[%d] = %s",rowNum, text[rowNum]);
fputs(text[rowNum], outFilePtr);
rowNum++;
strcat(text[rowNum], word);
strcat(text[rowNum], " \0");
/*strcat(wordlist[numwords], word);
strcat(wordlist[numwords], "\n\0");
wordlist = realloc(wordlist, (numwords + 1)*sizeof(char*));*/
numwords++;
memset(word, 0, 50);
rowLim = rowLim - prev;
}
wordIndex = 0;
}
}
strcat(text[rowNum], "\n\0");
printf("text[%d] = %s",rowNum, text[rowNum]);
fputs(text[rowNum], outFilePtr);
fclose(outFilePtr);
}
【问题讨论】:
-
怎么样?能详细点吗?
-
但是numwords被初始化为0,那不是总是分配空间吗?
-
@PythonNoob 发布 MCVE。你在程序的其他地方犯了一个错误,但由于你没有展示程序的其余部分,所以无法说出来。
-
第一个问题(尽管这绝不是问题的原因),
wordlist = realloc(wordlist, (numwords+1)*sizeof(char*))realloc()没有像您那样安全地使用。从您发布的代码中无法知道为什么invalid next size...消息,请发布Minimum Complete Verifiable Example -
@PythonNoob from your comment但是numwords被初始化为0,那不是总是分配空间吗?,看来我们真的很想看代码.. .