int main()
{
char* p = new char('a');
*reinterpret_cast<int*>(p) = 43523;
return 0;
}
这段代码运行正常,但它有多安全?它应该只分配一个字节的内存,但它似乎没有任何问题用数据填充4个字节。未分配的其他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个字节的值,这肯定是有风险的,即使这有效,我的意思是没有任何分段错误。你正在覆盖你不拥有的一些其他记忆部分,即使是拥有的,也必须用于其他目的。