C++ 删除动态数组后,其边界的某些值不会更改。为什么?

C++ 删除动态数组后,其边界的某些值不会更改。为什么?,c++,c,arrays,pointers,dynamic-memory-allocation,C++,C,Arrays,Pointers,Dynamic Memory Allocation,在c/c++中: delete运算符用于删除动态数组,但在使用delete运算符删除数组并打印后,某些值仍然相同。为什么?-我希望这些值是垃圾 #include <iostream> using namespace std; int main() { int n=5; int*A=new int[n]; for (int i=0;i<n;i++) A[i]=i+1; delete [] A; //deleting 'A' ar

在c/c++中:

delete运算符用于删除动态数组,但在使用delete运算符删除数组并打印后,某些值仍然相同。为什么?-我希望这些值是垃圾

#include <iostream>
using namespace std;

int main()
{
    int n=5;
    int*A=new int[n];

    for (int i=0;i<n;i++)
       A[i]=i+1;

    delete [] A; //deleting 'A' array

    for (int i=0;i<n;i++)
       printf("%d ",A[i]);

}
如果我们删除[]A;输出将是:

1 2 3 4 5

为什么数组中的某些值在假设数组元素应该有垃圾值的情况下仍然相同?

您的代码在释放bug后可以访问。如果你修复了这个bug,神秘感就会消失。其实很简单。

我如何修复它?@AbdulrhmanAboghanima-通过从不访问您已经释放的内存。@AbdulrhmanAboghanima您可以删除delete[]调用,也可以删除之后对[I]的访问。但是,在你这么做之前,你的编译器不需要让你的程序以任何特定的方式运行。虽然答案是正确的,但这个答案并不能真正回答问题。OP很明显地意识到了bug,因为它期望垃圾,并且想知道为什么C++不会产生预期结果垃圾,而不是如何修复它或者正确地处理它。只包含部分数据的任何内容都将被覆盖。无法保证您将读取垃圾-它可能是原始数据,可能被部分或随机覆盖,或者可能是垃圾,也可能是SEGFULT,根本不执行您的代码,执行您没有要求它执行的其他代码等等。。。要了解编译器决定对代码执行什么操作,/debug逐步完成程序的汇编。不要期望从未定义的行为中得到精确的行为。
1 2 3 4 5