【发布时间】:2014-01-18 22:25:08
【问题描述】:
我正在查看以下代码段。它编译得很好,但在包含 delete 语句时会返回错误。错误是没有分配被释放的指针。我在这里错过了什么?我对堆栈溢出站点的搜索没有出现与此问题完全相同的问题。指向“重复”的链接在我看来并不像重复。
代码是……
long val2 = 72;
long *pval2 = NULL;
pval2 = new long;
pval2 = &val2;
std::cout << "pval2 = " << *pval2 << "\n"; //prints the correct value
delete pval2;
我使用的编译器是 Xcode 开发工具中的 c++ 编译器。
谢谢
【问题讨论】:
-
由于
val2不是new分配的,它的地址&val2不能传递给delete。 -
你不能释放未分配的地址。
-
阅读一些关于 C++ 编程的好书。阅读C memory management和garbage collection和pointer aliasing;使用valgrind
标签: c++