[英]Why didn't the program crash?
我正在運行這些代碼
#include <stdio.h>
void Crash(char * cData){
cData[2] = 100;
}
int main() {
char cData[2] = {1,2};
Crash(&cData[0]);
printf("%d\n",cData[1]);
return 0;
}
我預計程序會崩潰,因為cData[2] = 100;
(of Crash())將更改Crash函數的返回地址。 我相信,緊挨着cData [1](main())的內存位置保留了Crash函數的返回地址。 因此,當Crash函數執行完后,它將取返回地址中的值(現在為100),並繼續執行其他代碼。 難道不應該這樣做導致程序崩潰嗎?
您的程序具有未定義的行為,可以是任何行為,包括根本沒有崩潰甚至是預期的行為。
在您的特定情況下,有可能數組char cData[2] = {1,2};
占用堆棧上的空間,並在其他重要信息(例如返回地址或保存的堆棧幀指針)之前填充2個額外的字節。 修改這些字節之一不會產生明顯的影響。 嘗試修改cData[4]
或cData[8]
等,但是不要怪我有不良的副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.