簡體   English   中英

為什么程序沒有崩潰?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM