0

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

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

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

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

    // delete[] ptr;
}

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

非常感谢!

4

2 回答 2

4

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

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

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

于 2012-04-21T19:35:51.443 回答
2

正在做

double *ptr = new double[3];

delete[] ptr;

是完全正确的。因此,您的问题必须存在于其他地方。我可以建议使用调试器来检查发生了什么,如果您使用的是 linux 系统,我建议您尝试 valgrind/helgrind - 非常好

于 2012-04-21T19:41:19.253 回答