所以我创建了这个函数来接收未知数量的字符串并将它们添加到字符串数组中。
char **receiveCode(int socket){
int line = 0;
size_t lines = 1;
size_t size = 1;
char** code = malloc(sizeof(char)*size);
while(1){
package_struct *aPackage = receivePackage(socket);
if(aPackage->type=='F'){break;}
size = size + aPackage->size;
code = realloc(code, size);
code[line] = malloc(sizeof(char)*aPackage->size);
strcpy(code[line],aPackage->package);
line++;
lines++;
free(aPackage);
}
code = realloc(code, size + 2);
code[line] = malloc(sizeof(char)*3);
code[lines]=NULL;
return code;
}
有时当我运行这段代码时会出现以下错误
* glibc 检测到 ./pp: realloc(): invalid next size: 0x00007f0f88001220 **
根据 Valgrind 的说法,这发生在那个函数中。
可能我使用了太多的 mallocs 和 reallocs...不过不确定。
最佳答案
我认为问题是这样的:
char** code = malloc(sizeof(char)*size);
在sizeof()
中应该是char *
而不是char
char** code = malloc(sizeof(char*)*size);
因为 code
是一个指向字符串的指针,所以为 char*
的指针分配内存
realloc
也有同样的问题
关于c - 重新分配字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501262/