【发布时间】:2012-07-10 08:52:40
【问题描述】:
其实这是我得到的作业。但我不知道答案。谁能帮帮我?
在以下 C++ 代码中看到的重要内存分配缺陷是什么?如何避免?
void testFunction(){
int * p = new int(5);
cout << p << *p << &p << endl;
}
【问题讨论】:
-
你显然没有为此付出任何努力。如果您花 10 秒时间在 google 中输入“C++ new”,您会立即找到关于为每个对应的
new设置一个delete并为每个对应的new[]设置一个delete[]并且不要混合它们的建议。缺少作业标签。作业需要你付出一些努力,而不是简单地转发问题。 -
@Preet 无需花费“那 10 秒”。我知道每个新的都需要删除,每个新的 [] 都需要删除 []。但这里的问题是我不明白这个问题。感谢 Luchian Grigore,我只有在阅读了他的回答后才正确理解了这个问题。关于“作业”标签;当我最近加入这里时,我不知道有一个“作业”标签。无论如何感谢您的信息
-
我认为,如果您已经“了解”
new和delete,您还会调查它们在语法之外的实际作用,并对它们的功能(堆分配),因此堆分配与堆栈分配/自动变量在使用和要求方面有何不同。不妨在这里补充一点,在实际的 C++ 中,您几乎永远不会拥有像问题中那样的函数(如果您需要在调用范围内修改它,您可以使用堆栈变量或通过引用或指针传递一个值,或者如果您只想打印,则按值传递)
标签: c++ memory-management