【发布时间】:2012-05-17 19:41:29
【问题描述】:
我在我的 Xcode 4.3.2 中关闭了自动引用计数 (ARC),并认为我掌握得很好。然后我写了这个小程序:
int main()
{
int *a = new int(3);
delete a;
printf("%i",*a);
return 0;
}
这是打印 3,但它应该打印垃圾。看起来编译器会处理我所有的内存分配,我不希望它这样做。我该怎么做才能删除它?
【问题讨论】:
-
您正在打印的是未定义的行为,但它恰好是 3,因为很可能内存在第 2 行和第 3 行之间没有被修改
-
它也恰好是我选择的任何东西。在另一个编译器(p.e codepad)中,它是垃圾。应该是这样的..
-
是的,它正在打印垃圾。垃圾恰好随机是3。人类的问题是大多数人不了解真正的随机性。dilbert.com/strips/comic/2001-10-25
-
调试版和发布版都会出现这种情况吗?
-
未定义的行为并不意味着你一定会得到垃圾。未定义意味着任何事情都可能发生,打印出 '3' 是完全符合的行为。这个程序可以合法地做的其他事情:开始随机播放你的音乐库中的音乐,让你的显示器起火,给你所有的朋友发电子邮件,讨厌邮件似乎来自你。
标签: c++ xcode memory automatic-ref-counting allocation