将值分配给未分配的内存时会发生什么?

时间:2014-10-24 08:55:20

标签: c++ memory-management

int main()
{
    char* p = new char('a');
    *reinterpret_cast<int*>(p) = 43523;

    return 0;
}

这段代码运行正常,但它有多安全?它应该只分配一个字节的内存,但它似乎没有任何问题用数据填充4个字节。未分配的其他3个字节会发生什么?

3 个答案:

答案 0 :(得分:0)

代码不安全。您的程序有未定义的行为。任何事情都可能发生。

答案 1 :(得分:0)

代码导致堆缓冲区溢出。你覆盖了你不拥有的内存,可以在程序的其他部分使用。

答案 2 :(得分:0)

char* p = new char('a');

&#39; a&#39;的ASCII码是97,所以这相当于:

char* p = new char(97);

单个字符(1个字节)空间分配有*p='a' 现在,你试图输入超过1个字节的值,这肯定是有风险的,即使这有效,我的意思是没有任何分段错误。你正在覆盖你不拥有的一些其他记忆部分,即使是拥有的,也必须用于其他目的。