0

我的代码出现错误,但我不确定在哪里修复它。

这是我的代码的作用的解释:

我正在编写一些代码来读取输入文件并将每一行作为对象(char 类型)存储在数组中。输入文件的第一行是一个数字。这个数字告诉我应该读取多少行并将其存储在数组中。这是我的代码:

int main(int argc, char *argv[]){
    FILE *fp; 
    char **path;
    int num, i;
    ...
    /*after reading the first line and store the number value in num*/
    path = malloc(num *sizeof(char));
    ...
    free(path);
}

运行代码后,我得到了这个

*** glibc detected *** free(): invalid next size (fast): 

我四处搜索并知道这是 malloc/free 错误,但我不完全知道要修复它。任何帮助都会很棒。谢谢!

4

1 回答 1

3
path = malloc(num *sizeof(char));

这是错误的。 path是一个指向 char 的指针,所以你需要 allocate num * sizeof(char*), not sizeof(char),它总是 1 (但指针几乎肯定不是 1 字节)。

要动态初始化指针,请始终分配所需的元素数量乘以指针指向的类型的大小。该指针指向 a char*,而不是 a char。它指向的指针指向chars(说起来很有趣……)

简化:

some_ptr *p = malloc(num_elems * sizeof *p);

编译器知道如何sizeof(*p)正确处理,您实际上并没有取消引用指针(否则会调用 UB,因为指针可能未初始化)。

于 2012-06-04T21:51:50.423 回答