我的代码出错,但我不知道在哪里修复它。
以下是我的代码所做的解释:
我正在编写一些代码来读取输入文件并将每一行存储为数组中的对象(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错误,但我并不知道要修复它。任何帮助都会很棒。谢谢!
答案 0 :(得分:3)
path = malloc(num *sizeof(char));
这是错误的。 path
是指向char的指针,因此你需要分配num * sizeof(char*)
,而不是sizeof(char)
,它总是1(但指针几乎肯定不是1个字节)。
动态初始化指针,总是分配所需元素的数量乘以指针所指向的类型的大小。此指针指向char*
,而不是char
。它指向的指针指向char
s(这说起来很有趣......)
简化:
some_ptr *p = malloc(num_elems * sizeof *p);
编译器知道如何正确处理sizeof(*p)
,你实际上并没有解除引用指针(否则会因为指针可能未初始化而调用UB)。