gpt4 book ai didi

c - 为什么程序没有崩溃?

转载 作者:行者123 更新时间:2023-11-30 14:55:45 26 4
gpt4 key购买 nike

我正在运行这些代码

#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;(Crash())会更改Crash函数的返回地址。我相信cData[1](main())旁边的内存位置保留了Crash函数的返回地址。所以Crash函数执行完毕后,会取返回地址中的值(现在是100)继续执行其他代码。那么这样做不应该导致程序崩溃吗?

最佳答案

您的程序有未定义的行为,可以是任何行为,包括根本不崩溃,甚至是预期的行为。

在您的特定情况下,数组 char cData[2] = {1,2}; 可能会占用堆栈上的空间,该空间在其他重要部分之前填充了 2 个额外字节诸如返回地址或保存的堆栈帧指针之类的信息。修改这些字节之一不会产生明显的影响。尝试修改 cData[4]cData[8] 等,但不要因为不良副作用而责怪我。

关于c - 为什么程序没有崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com