C ++正确的内存释放,没有关于分配的信息

时间:2012-04-21 19:34:16

标签: c++ memory-management memory-leaks

这可能听起来像个愚蠢的问题,但在这种情况下我无法找到有关如何正确释放内存的信息:

假设有一个函数返回double*(没有关于此函数的其他信息)。进一步假设以下用例:

for (int i = 0; i < SIZE; i++) {
    double *ptr = new double[3];

    /// do something with ptr, e.g., print

    // delete[] ptr;
}

在这种情况下如何正确释放内存,因为上面评论中放置的delete[] ptr;会导致回溯(为什么?)?

非常感谢!

2 个答案:

答案 0 :(得分:4)

  

没有关于此功能的其他信息

然后你不知道如何释放内存。如果你有它,请查看函数的源代码,否则请联系其作者或使用调试工具来了解它如何分配其内存。原始指针根本不带有必要的信息来知道如何解除分配它。

至于你的第二个不相关的案例,delete[]是正确的,所以问题必须在“do something”部分(假设您没有执行new重载等技巧)。

答案 1 :(得分:2)

否则

double *ptr = new double[3];

delete[] ptr;

是对的。所以你的问题必须存在于其他地方。我可以建议使用调试器来检查发生了什么,如果你在linux系统上,我建议尝试valgrind / helgrind - 这很不错