【问题标题】:What happens when assigning a value to non-allocated memory?将值分配给未分配的内存时会发生什么?
【发布时间】:2014-12-20 02:17:27
【问题描述】:
int main()
{
    char* p = new char('a');
    *reinterpret_cast<int*>(p) = 43523;

    return 0;
}

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

【问题讨论】:

    标签: c++ memory-management


    【解决方案1】:
    char* p = new char('a');
    

    'a'的ASCII码是97,所以相当于:

    char* p = new char(97);
    

    *p='a'分配单个字符(1字节)空间 现在,您尝试输入超过 1 字节的值,这肯定是有风险的,即使这样可行,我的意思是运行时没有任何分段错误。您正在覆盖您不拥有的其他一些内存部分,或者即使拥有,也必须用于其他目的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        代码导致堆缓冲区溢出。您正在覆盖您不拥有并且可以在程序的其他部分中使用的内存。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          • 2018-11-25
          相关资源
          最近更新 更多