我正在为C ++ / OOP考试而学习,对我的练习测试中的这个问题有些困惑。
以下代码段的输出是什么?
int *list = new int[5];
int *ptr;
for (int i = 0; i < 5; i ++)
list [ i] = i+ 1;
ptr = list;
delete [ ] list;
cout << *ptr
我找到了输出,即-17891602,但是我以为这只是对不再属于该程序的内存的引用而正确吗?因为我不一定会出错。
自从我使用指针以来已经有一段时间了,所以我开始尝试遵循代码的实际工作而变得一团糟。(与你们正在研究的某些东西相比,我知道这很简单,但是我才刚刚开始学习这些东西:))
该输出可以是任何东西(包括-17891602
)因为你提领的是有它的后盾内存释放的指针调用未定义的行为。
标准的相关部分是C++11 3.7.4.2 Deallocation functions /4
(我的粗体):
如果在标准库中提供给释放函数的参数是不是空指针值的指针,则释放函数应释放该指针引用的存储,从而使所有指向已释放存储的任何部分的指针均无效。使用无效的指针值(包括将其传递给释放函数)的效果是不确定的。
在我的系统上,以下程序(在您的代码段中建模):
#include <iostream>
int main (void) {
int *list = new int[5];
int *ptr;
for (int i = 0; i < 5; i ++)
list [ i] = i+ 1;
ptr = list;
delete [ ] list;
std::cout << *ptr;
return 0;
}
输出,1
但绝不是必需的。
您问题的正确答案很可能是4,尽管从技术上讲这不是输出(您可能看不到发送到输出流的“错误”字符串),但是这是执行代码的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句