int main()
{
int *p,*q;
p=(int *)malloc(sizeof(int));
*p=5;
free(p);
}
當我檢查free(p)
語句的執行後分配到p
的內存地址,我觀察到的內存內容爲0。這是正確的行爲,因爲我已閱讀,free
不會將內存初始化爲0?free()的內存初始化爲0
int main()
{
int *p,*q;
p=(int *)malloc(sizeof(int));
*p=5;
free(p);
}
當我檢查free(p)
語句的執行後分配到p
的內存地址,我觀察到的內存內容爲0。這是正確的行爲,因爲我已閱讀,free
不會將內存初始化爲0?free()的內存初始化爲0
free(p)
返回後*p
的內容未定義。它可能是0,42或其他任何東西。
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int *p, *x;
p = malloc(sizeof(int));
*p = 5;
// the following will print "0x7fd0cac00350: 5" or similar
printf("%p: ", p);
printf("%d\n", *p);
free(p);
printf("%p\n", p); // won't change from before
printf("%d\n", *p); // UNDEFINED BEHAVIOR
}
它不保證這樣做,但被允許。一些動態內存管理器使用未分配內存的內容將管理數據存儲在可用內存上。能夠訪問它似乎是一個運氣的情況下,它可能很容易導致段錯誤。 – Yunnosch
因爲它的返回類型是void *,所以不需要轉換malloc的返回值。 – MCG
此代碼具有未定義的行爲。 – MCG