【发布时间】:2019-05-25 17:28:19
【问题描述】:
我的程序正在读取一个文件(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 个字符串,那么它会给我带来内存泄漏。
【问题讨论】:
-
让 free() 工作。
-
` i = strlen(str); a = calloc(i,sizeof(*a)); strcpy(a,str);` - 你需要为终止零字符分配内存。
calloc(i + 1, ...). -
您在循环内调用
calloc,但在循环外调用free。因此,您调用free的次数似乎与调用calloc的次数不同。 -
是的,但是当我这样做时,它给我的错误是找不到密钥。
标签: c valgrind dynamic-memory-allocation