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