目前我在下面有下面的代码。 char **arr
最初设置为NULL
。然后在从文件读取时以文字形式存储。我只是随机选择了一个像5000
这样的大数字,因为我不知道如何正确地做malloc
业务,即使在网上查找并尝试学习之后。如何从文件读取(未知长度)时正确使用malloc和空闲char **?
而且,当我尝试free
char **arr
(我的代码的最后一节),有时我得到segmentation faults
,有时abort traps
等。如果有人可以告诉我怎么做这样的事情正确,将不胜感激!谢谢!
char **arr = NULL
File *fp = fopen("file.txt", "r")
char string[3000];
char counter = 0;
//to store
while(fscanf(fp, "%s", string)!=EOF){
arr = realloc(arr, 5000); //arbitrarily used a large number like 5000
arr[counter] = malloc(5000);
strcpy(arr[counter++], string);
}
//to free
for(i=0; i<counter; i++){
free(arr[i])
}
free(arr);
可能重复[如何获取文件的大小在C?](https://stackoverflow.com/questions/238603/how-can-i-get-a-files-size-in-c) –
使用[GCC](http://gcc.gnu.org/)编译所有警告和调试信息:'gcc -Wall -Wextra -g',然后**使用调试器**'gdb'和[valgrind]( http://valgrind.org/)。另请阅读[malloc](http://man7.org/linux/man-pages/man3/malloc.3.html)和相关文档 –
请提供一些[MCVE]的解释。你的修复我的代码问题是脱节 –