这个小程序有内存释放的问题吗,对高手来说很容易

veijerd 2005-05-09 10:20:28
下面这个小程序有内存释放的问题吗?只需要考虑opendir和readdir即可
我想返回的指针所指的内存区域一定是堆上的,那么为什么没有释放dp和dirp?
ok,closedir()可以算做释放dp
那么经过不断地
dirp=readdir(dp)
dirp被assign新值后,旧的值如何delete?

#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"
int main(int argc,char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("a single argument is required");
if((dp=opendir(argv[1]))==NULL)
err_sys("can't open %s",argv[1]);
while((dirp=readdir(dp))!=NULL)
printf("%s\n",dirp->d_name);
closedir(dp);
exit(0);
}
...全文
267 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzheng318 2005-05-15
  • 打赏
  • 举报
回复
是指向静态存储区
somedummy 2005-05-14
  • 打赏
  • 举报
回复
楼主写的程序少了点……

inet_addr也是这么干的……

你可以试试看多次调用这个函数,返回的地址应该是一样的……
llf_hust 2005-05-14
  • 打赏
  • 举报
回复
同意: whyglinux(山青水秀) 的观点
veijerd 2005-05-14
  • 打赏
  • 举报
回复
偶也顶
veijerd 2005-05-11
  • 打赏
  • 举报
回复
有没有可能是dirp指向的是 dp内部的空间呢?
这样也不存在释放的问题
:P
mostideal 2005-05-11
  • 打赏
  • 举报
回复
ding
whyglinux 2005-05-10
  • 打赏
  • 举报
回复
不,返回的指针不是指向堆,而是指向静态存储区。上述函数中使用的内存是在函数中使用 static 关键字定义的一块存储区,所以不需要用户来维护它。在传统的C库函数中经常使用这种方式。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧