我是编程新手,目前正在研究地址类型转换。我似乎不明白为什么我会得到这个:*** 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。
但我不明白,到底哪里出了问题?