相关疑难解决方法(0)

“检测到堆栈粉碎”的原因是什么?

我是编程新手,目前正在研究地址类型转换。我似乎不明白为什么我会得到这个:*** stack smashing detected ***: terminated Aborted (core dumped)当我运行以下代码时?

#include<iostream>
using namespace std;

void updateValue(int *p){
    *p = 610 % 255;
}

int main(){
    char ch = 'A';
    updateValue((int*)&ch);
    cout << ch; 
}
Run Code Online (Sandbox Code Playgroud)

以下是我对代码的理解:

的地址ch被类型转换int*并传递给函数updateValue()。现在,在updateValue()堆栈内部,p创建了一个指向 的整数指针ch。当 p 被取消引用时,它会解释ch为 anint并读取 4(或 8)字节的连续内存而不是 1。因此,'A'(65) 以及一些垃圾值被分配给610%255即 20。

但我不明白,到底哪里出了问题?

c++ pointers casting undefined-behavior

1
推荐指数
1
解决办法
2571
查看次数

标签 统计

c++ ×1

casting ×1

pointers ×1

undefined-behavior ×1