【发布时间】:2020-09-26 00:06:55
【问题描述】:
我有一个关于 C 函数 free() 的问题。 如果首先我为 char-string 分配内存,然后将 '\0' 传递到字符串的任何位置并将新指针设置为 '\0' 之后的下一个位置,会发生什么? 如果在我尝试在初始指针上使用 free 之后,是否存在内存泄漏?还是编译器知道终止位置并释放所有分配的内存? 手册上说“释放指针,由 malloc 分配”,但我对这个过程仍然没有完全了解。
有一个例子:
#include "stdlib.h"
int main()
{
int i = 0;
char* test = (char*)malloc(sizeof(char) * 100);
char s = 'a';
for (int i = 0; i < 10; i++)
test[i] = s;
test[10] = '\0';
char* v = (test + 6);
test[4] = 0;
free(test);
return 0;
}
Valgrind 说:
地址 0x522d048 是一个大小为 100 的块中的 8 个字节,已释放
【问题讨论】:
-
free()不关心被释放的内存块的内容。完全没有。
标签: c gcc memory-leaks valgrind free