2012-06-04 26 views
0

我从我的代码中得到一个错误,但我不知道在哪里解决它。C代码错误:免费():无效的下一个大小(快):

这里的解释我的代码呢:

我正在写一些代码,会读取输入文件,并存储在数组中的每一行作为一个对象(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 /无错,但我不知道到底要修复它。任何帮助都会很棒。谢谢!

回答

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

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

动态初始化指针,始终分配所需元素的数量乘以指针指向的类型的大小乘以。该指针指向char*,而不是char。它指向的指针指向char秒(这是样开玩笑地说...)

为了简化:

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

编译器知道如何正确对待sizeof(*p),你不提领实际一个指针(否则会调用UB,因为指针可能未初始化)。

+0

为了方便且始终符合最后一段中的规则,您应该使用惯用的malloc表达式:'ptr = malloc(N * sizeof * ptr)' –

+0

@ eq-:是的,很好的调用。谢谢,我会添加一个例子。 –

+0

ahh现在有道理......但我仍然得到同样的错误......我有“path [i] = malloc(strlen(buffer)+1);”在while循环可以导致这个问题? – user1436057

相关问题