0
我做了以下程序:爲什麼Windows的gflags無法使用此代碼崩潰?
int main() {
int* p = new int[10];
delete[] p;
p[0] = 0;
return 0;
}
然後我執行此程序啓用GFLAGS:
C:\tmp\Test2\Debug>"C:\Program Files\Debugging Tools for Windows\gflags.exe" -p /enable Test2.exe /full
path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
test2.exe: page heap enabled
C:\tmp\Test2\Debug>test2
C:\tmp\Test2\Debug>
正如預期的那樣,程序崩潰。用調試器來運行它,我可以看到它崩潰,在這一行:
p[0] = 0;
這就是我的預期。
不過,這一方案不會崩潰:
int main() {
int* p = new int[10];
p[10] = 0;
return 0;
}
爲什麼不GFLAGS搭上了界外訪問?通常,gflags檢測到哪種堆錯誤,以及未檢測到什麼錯誤?
此列表位於:http://technet.microsoft.com/en-us/library/cc779664%28WS.10%29.aspx'堆尾檢查'功能將無法正常工作,因爲您忘記釋放記憶。 –
@Hans Passant:謝謝!爲什麼你發佈這個評論而不是答案? –
呃,它只是鏈接湯。隨意發佈它自己。 –