【发布时间】:2018-06-17 11:23:55
【问题描述】:
我有 Java 方面的背景,但我还没有完全习惯指针和范围的概念,如果这个问题看起来很愚蠢,请见谅。
我在某处读到我应该删除在堆上分配的指针。我明白这一点,但我是否也应该删除这样给我的指针:
#include<dirent.h>
DIR* dir;
struct dirent* entries;
dir= opendir("D:/DIR")
entries= readdir(entries)
// Should I delete the pointers after I'm done with them?
delete entries;
delete dir;
我应该删除从其他地方分配的指针还是超出范围自动删除它们?
或者删除它们是否正确,因为我没有使用new 分配它们?但是,如果它是错误的,我如何确保从其他方法分配的内存在我用完它们后会被删除?
【问题讨论】:
-
您需要阅读每个函数的文档。
#include<dirent.h>哪里不是标准的C++或C? -
你
delete你new和delete[]你new[]。并且你永远不应该delete任何未使用new分配的东西,例如使用malloc分配的内存。并且如在例如thisreaddirmanual page 你应该不free返回的指针。你也不应该释放opendir返回的指针,而是应该像文件一样关闭它,使用closedir。网络上的任何例子都应该告诉你。 -
今后,请不要发送带有语言标签的垃圾邮件。仅使用您实际编程的语言。在您的情况下,它应该只是
c++标记。 -
在这种情况下,这些指针是由函数调用自动分配的,因此您无需删除它们或担心,但您必须调用各自的关闭函数,例如
closedir()。此外,如果您检查man readdir,则表明您不应释放此函数调用返回的指针。
标签: c++ pointers posix heap-memory