我有以下代码
int wordLenght = 256, arrayLength = 2, i = 0, counter = 0;
char **stringArray = NULL;
stringArray = calloc(arrayLength, sizeof(*stringArray));
for(counter; counter<wordLenght; counter++)
stringArray[counter] = calloc(wordLenght, sizeof(stringArray));
while(1)
{
printf("Input: ");
fgets(stringArray[i], wordLenght, stdin);
printf("stringArray[%d]: %s\n", i, stringArray[i]);
if(i == arrayLength)
{
printf("Reallocation !!!\n");
arrayLength *= 2;
stringArray = realloc(stringArray, arrayLength*sizeof(*stringArray));
}
i++;
}
我收到此重新分配错误:
*** glibc detected *** ./stringArray: realloc(): invalid next size: 0x0000000000b49010 ***
======= Backtrace: =========
/lib/libc.so.6(+0x775b6)[0x7f4dd12565b6]
/lib/libc.so.6(+0x7dd66)[0x7f4dd125cd66]
/lib/libc.so.6(realloc+0xf0)[0x7f4dd125d080]
./stringArray[0x4007f9]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f4dd11fdc4d]
./stringArray[0x400629]
我的问题是什么???
谢谢,问候
最佳答案
stringArray = calloc(arrayLength, sizeof(*stringArray));
这里您可能想使用 sizeof(char*)
for(counter; counter<wordLenght; counter++) stringArray[counter] = calloc(wordLenght, sizeof(stringArray));
这里你循环了 256 次 (wordLenght),但你应该只循环 2 次 (arrayLength)。此外,您可能想使用 sizeof(char) 而不是 sizeof(stringArray)。
if(i == arrayLength) {...}
此检查应该在调用 fgets 之前完成,因为现在您首先使用内存,然后再分配它们。
此外,在重新分配 stringArray 后,您需要使用类似的方法分配其余字符串
for(counter = i; counter<arrayLength; counter++) stringArray[counter] = (char*)calloc(wordLenght, sizeof(char));
最后,您需要在退出应用程序之前释放所有分配的内存。
关于c - 重新分配二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186284/