char *p;
while (1) {
p = malloc(1);
*p = 0;
}
free(p)),造成嚴重記憶體洩漏。malloc 返回 NULL。*p = 0 解引用空指標 → **段錯誤** 退出。while (1) {
p = malloc(1);
if (p == NULL) {
fprintf(stderr, "malloc 失敗,記憶體耗盡\n");
break;
}
*p = 0;
}
輸出確認會印出錯誤訊息而非直接崩潰。
char *p = malloc(1);
if (p) {
*p = 0;
free(p); // 用完釋放
}
malloc(0) 行為實現定義(可能返回 NULL 或唯一指標),不應依賴。realloc 擴大塊。valgrind --leak-check=full 可檢測洩漏。