多次使用后realloc失败 #包括 #包括 内部主(空) { 字符串[10]; 整数计数=0; int buff=1; int i=0; 字符**测试=malloc(sizeof(字符*)*buff); 而(1){ scanf(“%s”,字符串); 计数++; 如果(计数>增益){ buff+=buff; 测试=realloc(测试,buff); 测试[i]=字符串; i++; } 否则{ 测试[i]=字符串; i++; } } }

多次使用后realloc失败 #包括 #包括 内部主(空) { 字符串[10]; 整数计数=0; int buff=1; int i=0; 字符**测试=malloc(sizeof(字符*)*buff); 而(1){ scanf(“%s”,字符串); 计数++; 如果(计数>增益){ buff+=buff; 测试=realloc(测试,buff); 测试[i]=字符串; i++; } 否则{ 测试[i]=字符串; i++; } } },c,malloc,realloc,C,Malloc,Realloc,这只是我正在处理的一个更大项目的一些测试代码,遇到了同样的问题(因此buff如此之小)。我不知道为什么,realloc()在~2-3次调用后失败。有什么想法吗 #include <stdlib.h> #include <stdio.h> int main(void) { char string[10]; int count = 0; int buff = 1; int i = 0; char **test = malloc(siz

这只是我正在处理的一个更大项目的一些测试代码,遇到了同样的问题(因此buff如此之小)。我不知道为什么,
realloc()
在~2-3次调用后失败。有什么想法吗

#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++;
        }
    }
}
您在第一个realloc上分配两个字节,然后分配三个字节…,而不是两个、三个指针

您的程序只是一个巨大的未定义的行为

 test = realloc(test, buff);
顺便说一句,所有分配的指针将指向内存中的相同位置

test[i]=字符串不为字符串分配空间,也不复制字符串

测试[0]==测试[1]==测试[2]==测试[n]
哪一个是最后扫描的字符串

要存储所有扫描的字符串,需要分配内存并复制字符串

 test = realloc(test, buff * sizeof(*test));

很明显,我使用的字符串少于10个字符,而非终止的while循环仅用于debuggingade:所有指针都指向同一个(最后输入的)字符串值。@P_uuj_uuu您在我键入时添加了补救措施-我没有注意到传递给它的注释。永远不要直接将
realloc
的返回值分配给块,因为它可能返回
NULL
,并且所有以前的数据都将丢失。更好的做法是编写
sizeof(*test)
@JasonS如果这个答案解决了您的问题,您应该这样做。另外一个问题:您不能在指针数组中为更多指针重新分配空间吗?我一直在尝试向“test”数组添加更多指针,但它似乎总是说无法进行重新分配。即使在我的代码中加入了上述答案
test[i] = malloc(strlen(string) + 1);
strcpy(test[i], string);