我寫了這段代碼,並期待quicly出現段錯誤,但似乎允許訪問我不應該能夠訪問的內存段至。訪問超出界限的內存後,不會立即出現分段錯誤
#include<stdio.h>
int main()
{
int tab[1];
tab[0]=42;
int i;
//Expecting Seg Fault from i==1...
for(i=0;;i++)
{
printf("%d \t %d \n", i, tab[i]);
}
return 0;
}
我使用編譯:
gcc -Wall -Wextra my_code.c -o segfault && ./segfault
在執行時,可變i
我得到我分割故障之前達到1000階值。
我的問題是:爲什麼我能夠讀到tab
到目前爲止?
PS:使用#include <stdlib.h>
並宣佈int * tab = (int*)malloc(sizeof(int));
不會改變任何東西......
謝謝,最好成績。
這麼多的蠢貨我不能挑一個。 – 2014-12-03 11:14:05
非常感謝您所有的答案,以及編輯標題。我對這個重複的主題感到厭倦,我不知道正確的錯誤是「超出限制」而不是「分段錯誤」。 – jchd 2014-12-03 13:12:37