Sign-up....

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

下面这个小程序有内存释放的问题吗?只需要考虑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);

}

[494 byte] By [msdn] at [2007-8-14 12:42:59]
# 1 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

不,返回的指针不是指向堆,而是指向静态存储区。上述函数中使用的内存是在函数中使用 static 关键字定义的一块存储区,所以不需要用户来维护它。在传统的C库函数中经常使用这种方式。

whyglinux at 2005-5-10 8:52:55 >
# 2 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

有没有可能是dirp指向的是 dp内部的空间呢?

这样也不存在释放的问题

:P

veijerd at 2005-5-11 11:07:54 >
# 3 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

ding

mostideal at 2005-5-11 18:52:47 >
# 4 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

同意: whyglinux(山青水秀) 的观点

llf_hust at 2005-5-14 23:05:35 >
# 5 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

楼主写的程序少了点……

inet_addr也是这么干的……

你可以试试看多次调用这个函数,返回的地址应该是一样的……

somedummy at 2005-5-14 23:40:44 >
# 6 Re: 这个小程序有内存释放的问题吗,对高手来说很容易

是指向静态存储区

xuzheng318 at 2005-5-15 0:01:45 >

C/C++

All Classified