c - 如何正确释放指针

c - 如何正确释放指针

这是我编写的一个函数:

uint32_t file_list(char *path, char ***ls){

DIR *dp;

//uint32_t i;

struct stat fileStat;

struct dirent *ep = NULL;

uint32_t len, count = 0;

int file = 0;

*ls = NULL;

dp = opendir (path);

if(dp == NULL){

fprintf(stderr, "no dir: %s\n", path);

exit(1);

}

ep = readdir(dp);

while(NULL != ep){

count++;

ep = readdir(dp);

}

rewinddir(dp);

*ls = calloc(count, sizeof(char *));

count = 0;

ep = readdir(dp);

while(ep != NULL){

if((file = open(ep->d_name, O_RDONLY)) < 0){

perror("apertura file");

exit(1);

}

if(fstat(file, &fileStat) != 0){

perror("filestat");

free(*ls);

close(file);

exit(EXIT_FAILURE);

}

close(file);

if(S_ISDIR(fileStat.st_mode)){

len = strlen(ep->d_name);

(*ls)[count] = malloc(len+5); /* lunghezza stringa + "DIR \n" */

strcpy((*ls)[count], "DIR "); /* copio DIR */

strcat((*ls)[count++], ep->d_name); /* concateno la stringa DIR con il nome della dir */

ep = readdir(dp);

}

else{

(*ls)[count++] = strdup(ep->d_name);

ep = readdir(dp);

}

}

/*for(i=0; i

free((*ls)[count]);

}*/

(void)closedir(dp);

return count;

}

进入我拥有的主程序char **files,然后我得到计数​​的部分count = file_list("./", &files);

是我的问题是什么?

每个人都知道它们(指针)可能引用的动态分配的内存必须被释放,但如果我释放指针(使用 for 循环)然后进入主程序,我在文件列表期间出现意外行为(重复的文件名,没有文件名等)。实际上,如果我不释放指针,所有指针都可以正常工作。

所以我的问题是:如何释放这些指针?

提前致谢!

相关阅读

香川真司
beat365手机安卓版

香川真司

🕒 08-03 👁️‍🗨️ 8919
Nike Run Club Community:为全球社区跑者带去更多
bt365手机投注

Nike Run Club Community:为全球社区跑者带去更多

🕒 09-24 👁️‍🗨️ 9921
科逸/COZY品牌介绍-科逸/COZY是哪个国家的品牌
365bet在线娱乐

科逸/COZY品牌介绍-科逸/COZY是哪个国家的品牌

🕒 09-02 👁️‍🗨️ 5317
零食批发市场在哪里拿货?一手货源批发市场在哪里
bt365手机投注

零食批发市场在哪里拿货?一手货源批发市场在哪里

🕒 08-17 👁️‍🗨️ 9745
2014多少天(2014年上半年有几天)
beat365手机安卓版

2014多少天(2014年上半年有几天)

🕒 07-19 👁️‍🗨️ 8917
航嘉渠道售后服务管理条例
365bet在线娱乐

航嘉渠道售后服务管理条例

🕒 08-01 👁️‍🗨️ 5489
TERA常见问题解决方案第二期 更新错误看这里
bt365手机投注

TERA常见问题解决方案第二期 更新错误看这里

🕒 08-23 👁️‍🗨️ 5459
《昆虫记》那么多版本,读哪一本比较合适?
beat365手机安卓版

《昆虫记》那么多版本,读哪一本比较合适?

🕒 07-30 👁️‍🗨️ 5687
“算法”到底是什么?为什么它这么重要?
365bet在线娱乐

“算法”到底是什么?为什么它这么重要?

🕒 08-28 👁️‍🗨️ 6430