请帮助我理解C++;? 删除的数据由OS,< /P> < P>给出,当你在C++中使用代码>删除< /Cord>一个对象时,它的内存不会消失——它只是被标记为未使用。这是以前存在的。但是,您不应该故意这样做,因为这种访问可能会导致错误并使您的程序崩溃。

请帮助我理解C++;? 删除的数据由OS,< /P> < P>给出,当你在C++中使用代码>删除< /Cord>一个对象时,它的内存不会消失——它只是被标记为未使用。这是以前存在的。但是,您不应该故意这样做,因为这种访问可能会导致错误并使您的程序崩溃。,c++,C++,“在对象上使用delete运算符将释放其内存。A 删除对象后取消引用指针的程序可以 有不可预测的结果或崩溃。” 但在下面的示例中,即使在使用delete之后,当我尝试打印该位置的contain时,它会打印正确的值吗?怎么做 我真的很困惑…请引导我?多谢各位 int main() { int max_Value = 12; int *arr = new int [max_Value]; arr[4] = 9; cout<< "arr of

“在对象上使用delete运算符将释放其内存。A 删除对象后取消引用指针的程序可以 有不可预测的结果或崩溃。”

但在下面的示例中,即使在使用delete之后,当我尝试打印该位置的contain时,它会打印正确的值吗?怎么做

我真的很困惑…请引导我?多谢各位

     int main()
 {
  int max_Value = 12;
     int *arr = new int [max_Value];
     arr[4] = 9;
     cout<< "arr of four is having: "<<arr[4]<<endl;

     delete[]arr;

    int i = 0;
    for(i=0; i<12; i++)
         cout<< arr[i]<<endl;
 return 0;
 }
intmain()
{
int max_值=12;
int*arr=新的int[max_值];
arr[4]=9;

cout当您
删除
(或
删除[]
)指针时,您基本上会告诉底层系统您将不再使用此内存块。系统现在拥有该内存块,并且可以使用它(例如:分配其他内容)。 在您的情况下,删除后没有完成任何工作,因此释放的内存块仍然未被触及。但您不能依赖它,这是一种特殊情况。您可以尝试进行其他
新的
分配,用数据填充它并观察旧的指针对象数据,您可以观察到内存块受到其他写入操作的影响

这是我的结果,YMMV,因为我们明确处理未定义的行为:

int main() {
    int max_Value = 12;
    int *arr = new int[max_Value];
    arr[4] = 9;
    cout << "arr of four is having: " << arr[4] << endl;

    delete[] arr;

    // print old data
    for (int i = 0; i < 12; i++)
        cout << arr[i] << " ";
    cout << endl;

    // another write (overwrite?) operation
    int *arr2 = new int[max_Value];
    for (int i = 0; i < 12; i++)
        arr2[i] = -1;

    // print again old data
    for (int i = 0; i < 12; i++)
        cout << arr[i] << " ";
    return 0;
}

<> >删除的数据由OS,< /P> < P>给出,当你在C++中使用代码>删除< /Cord>一个对象时,它的内存不会消失——它只是被标记为未使用。这是以前存在的。但是,您不应该故意这样做,因为这种访问可能会导致错误并使您的程序崩溃。

它不会因为您使用禁用的方式编译而崩溃。您可以使用开关启用它们


MSDN谈论不可预测的行为,因为它确实是不可预测的:下次您尝试分配动态内存时,有可能获得(部分)您最近释放的相同区域。这将导致您的程序在两个(或更多)中使用相同的内存区域放置,同时假设只有一个访问它。结果会是什么?不可预测的-取决于您的代码。

“不可预测的结果”。这还包括“像什么都没发生一样工作”。关键是,您不能依赖它。“可以有不可预测的结果”的哪一部分与你的经历不相容?不同的问题,都一样。“不可预测的结果”意味着“没有什么是不可能的”。你预测了什么不可预测的结果?
arr of four is having: 9
3619976 3615400 0 0 9 62374 3604676 3611152 0 0 0 0
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1