这可能听起来像个愚蠢的问题,但在这种情况下我无法找到有关如何正确释放内存的信息:
假设有一个函数返回double*
(没有关于此函数的其他信息)。进一步假设以下用例:
for (int i = 0; i < SIZE; i++) {
double *ptr = new double[3];
/// do something with ptr, e.g., print
// delete[] ptr;
}
在这种情况下如何正确释放内存,因为上面评论中放置的delete[] ptr;
会导致回溯(为什么?)?
非常感谢!
答案 0 :(得分:4)
没有关于此功能的其他信息
然后你不知道如何释放内存。如果你有它,请查看函数的源代码,否则请联系其作者或使用调试工具来了解它如何分配其内存。原始指针根本不带有必要的信息来知道如何解除分配它。
至于你的第二个不相关的案例,delete[]
是正确的,所以问题必须在“do something
”部分(假设您没有执行new
重载等技巧)。
答案 1 :(得分:2)
否则
double *ptr = new double[3];
delete[] ptr;
是对的。所以你的问题必须存在于其他地方。我可以建议使用调试器来检查发生了什么,如果你在linux系统上,我建议尝试valgrind / helgrind - 这很不错