Pra*_*har 1 c++ pointers casting undefined-behavior
我是编程新手,目前正在研究地址类型转换。我似乎不明白为什么我会得到这个:*** 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。
但我不明白,到底哪里出了问题?
当 p 被取消引用时,它会解释...
当您通过重新解释间接p访问错误类型的对象时,程序的行为是未定义的。
出了什么问题以及哪里出了问题?
当您将指向一种类型的指针重新解释为指向不相关类型的指针时,事情就开始出错了。
一些经验法则: