C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生



当代码执行变量num时,获取值'9',则发生错误。

char num = 'A';
int* pnum = (int *)#
*pnum = '9';

错误是什么意思?

像这样强制转换和使用指针是未定义的行为。您不能只获取指向char的指针,并假装它指向int并期望它正常工作。堆栈很可能被损坏,因为intchar占用更多的内存,所以通过执行*pnum = '9';,你正在写入无效内存。char的大小1,但*pnum = '9';可能会修改比这更多的内存(int通常有大小4(。因此,如果为堆栈上的char保留了 1 个字节的内存,那么它正在修改的其他三个字节是什么?

改用char*指向char

int main() {
char num = 'A';
char* pnum = #
*pnum = '9';
std::cout << num << std::endl;
}

最新更新