#include <stdio.h>
#include <stdlib.h>
int main() {
system("clear");
int *pt = malloc(2 * sizeof *pt);
int *tmp = NULL;
int i;
pt[0] = 44;
pt[1] = 9;
printf("pt[0] : %d\n", pt[0]);
printf("pt[1] : %d\n", pt[1]);
tmp = realloc(pt, 3 * sizeof *pt);
if (!tmp) {
printf("merde alors\n");
} else {
pt = tmp;
for (i = 0; i < 5; i++) {
pt[i] = i + 1;
printf("pt[%d] : %d\n", i, pt[i]);
}
}
//the compiler should give me an error here, because I try use an unallocated memory:
printf("pt[%d] : %d\n", i + 8, pt[i + 8]);
free(pt);
return 0;
}
大家好:) 我不明白,正如你所看到的,我嘗試使用未分配的內存,所以我期望從編譯器接收到一個積極的錯誤。 請原諒我的英文不好。 感謝您的時間:) Valgrind report :編譯器爲什麼不給我錯誤?
有些事情你只需要調試。它不能顯示僅在運行時出現的錯誤。 –
即使數組是硬編碼的,C編譯器也不會阻止您索引超出其範圍。對於一個指針,編譯器甚至可能不知道你將在運行時分配多少內存。這取決於你檢查數組索引。 –
根據您的開發環境,您可能會發現像valgrind這樣的調試工具很有用。 Valgrind能夠在運行時查明這類錯誤。 http://valgrind.org/ –