C readdir& struct dirent allocation

时间:2016-01-09 19:37:20

标签: c readdir dirent.h

readdir返回一个指向struct dirent的指针,我已经测试了两个不同指针中存储的对readdir的两次调用是否修改了第一个指针内容,它没有。< / p>

所以我猜readdir会分配一些内存,我是对的吗?

如果是这样,它应该被释放,这是我以前从未做过的......

3 个答案:

答案 0 :(得分:1)

POSIX表示应用程序不得修改readdir()返回的结构:

  

申请不得修改退货的结构   readdir()的值,也不是指向的任何存储区域   结构中的指针。返回的指针和指针   在结构内,可能是无效的或结构或   后续调用readdir()可能会覆盖存储区域   在同一目录流上。他们不应受到打电话的影响   readdir()在不同的目录流上。

因此,无论是内部分配内存还是使用静态缓冲区,都取决于特定实现的实现方式。您需要做的就是尊重该功能所需的合同。也就是说,您不能尝试修改它并调用closedir()来关闭目录流。

答案 1 :(得分:0)

如果它确实分配了任何内存,那么对closedir(http://linux.die.net/man/3/closedir)的调用将为你释放

答案 2 :(得分:0)

是的,它应该被释放。您应该在closedir之后的目录上调用readdir,就像在fclose之后为常规文件调用fopen一样。