【发布时间】:2015-09-30 11:29:57
【问题描述】:
我正在使用此函数将文件的内容读入字符串
void readFile2String(char **string, char location[]){
FILE *fileList;
int size;
char *temp;
char command[1024];
if((fileList=fopen(location,"r")) == NULL){
perror(" Error opening list of directories: ");
exit(2);
}
fseek(fileList,0,SEEK_END);
size = ftell(fileList);
rewind(fileList);
temp = malloc((size+1)*(sizeof(char)));
fread(temp,sizeof(char),size,fileList);
temp[size]=0; // Terminate string with 0
*string = temp;
fclose(fileList);
}
我正在使用该字符串进行进一步操作。我称这个函数为
char *temp;
readFile2String(&temp, fileName);
我成功获取了字符串中的文件内容。但是当稍后我尝试再次使用 fopen 时,我在运行时收到 malloc 错误。我已经尝试在这个程序中注释掉对这个函数的调用,之后,我可以根据需要多次使用 fopen。我的功能有什么问题?
谢谢。
【问题讨论】:
-
您
malloc的所有内容都必须通过free归还。你基本上是在泄漏内存。也许不是马上,而是稍后的某个地方。 -
您没有包含您遇到的确切错误,因此很难说明它无法按预期工作的原因。
-
ftell() 返回一个
long而不是int,所以size 的声明应该是long size;...这对于一个非常大的文件来说可能是个大问题。 -
注意:
sizeof(char)永远不会产生与1不同的任何东西。没必要拿。如果您想让malloc更便携(无论出于何种原因),请使用sizeof(*temp)。 -
ftell返回一个long int。这可能与int的宽度相同,但你不应该依赖它。