#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char string[10];
int count = 0;
int buff = 1;
int i = 0;
char **test = malloc(sizeof(char*) * buff);
while (1) {
scanf("%s", string);
count++;
if (count > buff) {
buff += buff;
test = realloc(test, buff);
test[i] = string;
i++;
}
else {
test[i] = string;
i++;
}
}
}
这只是一个大型项目的一些测试代码,该项目正在遭受相同的问题(因此buff这么小)。我不确定为什么,但是realloc()
在约2-3次通话后失败了。任何想法?
答案 0 :(得分:1)
test = realloc(test, buff);
您在第一次重新分配时分配了两个字节,然后分配了三个字节....,而不是两个,三个... 指针
的空间您的程序只是一个巨大的未定义行为
test = realloc(test, buff * sizeof(*test));
顺便说一句,所有分配的指针将指向内存中的同一位置。
test[i] = string;
不会为字符串分配空间,也不会复制它。
test[0] == test[1] == test[2] .... ==test[n]
是最后扫描的字符串
要存储所有被扫描的字符串,您需要分配内存并复制字符串
test[i] = malloc(strlen(string) + 1);
strcpy(test[i], string);