c - 重新分配字符串数组

标签 c malloc valgrind realloc

所以我创建了这个函数来接收未知数量的字符串并将它们添加到字符串数组中。

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/

相关文章:

c - 如何创建一个函数来计算每个字母的出现次数?

java - python解释器到底是用什么实现的?

c - 什么时候使用malloc,真的有必要吗

c - 如果我在 calloc 分配的内存之外设置一个值会怎样?

java - 防止 valgrind 跟踪使用 execvp 创建的任何 java 子进程

c++ - 从 C++ 程序中提取内存跟踪

c - 如何从 char[4] 生成 int? (在 C 中)

有人可以给我解释一下这个功能吗?

c - 未分配正在释放的指针,中止陷阱 : 6

c - 带指针的结构的 malloc(重新访问)