我的程序正在读取一个文件(test.txt,它仅包含2个字符串和一个空格,例如:“ Hello World”),当我使用calloc时,使用valgrind会给我造成内存泄漏。问题是我在第二个内存分配中丢失了更多字节(b = calloc(11,sizeof(* b))。
我尝试使用free()无效
char str[1024];
char *a = NULL;
char *a = NULL;
int i = 0;
while(!feof(myfile)) {
//I used some codes here to skip "\r\n" which is working fine.
fscanf(myfile, "%10s", str);
i = strlen(str);
if(key_find(k,str) == NULL){
a = calloc(i,sizeof(*a));
strcpy(a,str);
key_insert(k,a);
}
fscanf(myfile, " ");
fscanf(myfile, "%10s", str);
if(key_find(k,str) == NULL){
b = calloc(i,sizeof(*a));
strcpy(b,str);
key_insert(k,a);
}
}
free(a); free(b);
当我的txt文件中只有2个不同的字符串时,它不会给我造成任何内存泄漏。但是,如果我有4个以上的字符串,则会给我造成内存泄漏。
答案 0 :(得分:0)
在运行时,您需要执行与calloc一样多的免费操作。如果calloc在循环内,则free也应在循环内,例如:
b = calloc(i,sizeof(*a));
strcpy(b,str);
key_insert(k,a); /* you should probably replace this by key_insert(k,b) */
free(b); /* don't need b anymore? free it! */
然后
{{1}}