如何解决使用“ new []”进行分配并仅使用“ delete”进行删除会发生什么
好的,所以我正在尝试使用C ++进行指针操作,因为在将近一年半的休息之后,我又开始重新编写代码(School Stuff)。所以,如果这对您来说太幼稚,请饶恕我,我只是在生锈。
无论如何,我在VS 2019中一直使用指针,但是我发现有些东西开始困扰我。
这是我写的代码:
#include <iostream>
int main() {
int* i = new int[4];
*i = 323;
*(i + 1) = 453;
std::cout << *i << std::endl;
std::cout << *(i + 1) << std::endl;
delete i;
}
似乎有些奇怪吧?别担心,删除是有意的,也是这个问题的重点。现在我希望它会造成一些内存灾难,因为这不是我们删除堆上数组的方法, BUT 令我惊讶的是,它没有(我在Debug和Release中都这样做了,相同的观察结果
现在,我希望在删除时遇到某种不幸,因为我没有按照应该删除的方式删除它。但是
删除不正确
现在,在另一次运行中,我实际上正确地使用了删除运算符 ,并且它执行了相同的操作:
现在,当我尝试使用malloc进行分配并使用delete释放它时,我得到了相同的结果。
所以我的问题是-为什么我的代码不会混乱?我的意思是,如果这是它的工作方式,我可以使用delete(指针)擦除整个数组。
我的问题的要旨是 “新操作员在幕后做什么?”
解决方法
使用“ new []”进行分配并仅使用“ delete”进行删除会发生什么情况
程序的行为是不确定的。
现在我希望它会引起一些内存灾难
您的期望被误导了。未定义的行为并不能保证在内存中发生意外或其他情况。不能保证程序的行为。
我的意思是这是怎么工作的
这就是您观察它“起作用”的方式。这并不意味着它一定会一直那样工作。欢迎来到不确定的行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。