一夜7次是真的吗?男人这个“小秘密”,嘿嘿~ 2025-11-16 18:55:29
【技巧教学】失重空间局内角色解析之刀锋队长,“钩爪抓人”其乐无穷 2025-12-14 06:06:15
手机贷放款要多久(手机贷款要多久能到账?) 2025-05-20 05:11:41
兔兔积分插件2.0 2025-11-15 00:39:27
34岁女星承认离婚!结婚12年老公出轨17次,减肥80斤后她狠甩渣男! 2025-10-04 08:05:14
炉石传说梦境新配方乱斗卡组推荐指南[多图] 2025-09-07 12:03:34
影院开门再等半年?从业者:没期限的等待最磨人 2025-10-04 09:06:54
粤语怎么学的最快 2025-05-15 21:13:47
三星A7信号稳定如何?(三星A7信号表现如何,是否值得购买?) 2025-05-16 06:26:06
尼康COOLPIX P900s报价 2025-05-09 16:39:35

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 循环)然后进入主程序,我在文件列表期间出现意外行为(重复的文件名,没有文件名等)。实际上,如果我不释放指针,所有指针都可以正常工作。

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

提前致谢!