动态分配和释放C

Rob*_*tle -4 c heap malloc free

void* heap = malloc(100);
char *c = heap;
strcpy(c, "Terence");
printf("heap = %s\n", heap);
free(heap);
heap = malloc(100);
printf("heap = %s\n", heap);
Run Code Online (Sandbox Code Playgroud)

输出是:

heap = Terence
heap = 
Run Code Online (Sandbox Code Playgroud)

这就是我的期望,但现在我有一个更复杂的代码,结构与上面类似,但输出如下:

heap = "Terence"
heap = "  ren  "
Run Code Online (Sandbox Code Playgroud)

类似的东西.

堆似乎还没有被清理干净?

有办法解决吗?

oua*_*uah 7

分配的内存区域malloc具有不确定的初始值.

从C标准(强调我的):

(c99,7.20.3.3p2)"malloc函数为一个对象分配空间,该对象的大小由大小指定,其值是不确定的*."

使用callocmemset之后malloc具有确定值.