我正在尝试列出特定目录的子目录文件。但是,我收到错误"realloc((:下一个大小无效"。我正在使用 realloc((,因为进一步,我将对数组进行排序(按修改时间,按 lex...
DIR *dir2=NULL;
DIR *dir1;
struct dirent *sd;
struct dirent *ptr;
char **arr2=malloc(sizeof(char *));
int size=0;
dir1=opendir(directory); //current dir
while((sd=readdir(dir1))!=NULL)
{
if(sd->d_type==DT_DIR){ //checking,is it a dir?
dir2=opendir(sd->d_name); //parent dir
printf("n./%sn",sd->d_name); //printing parent directory's name
while((ptr=readdir(dir2))!=NULL){
if(size>0){
arr2=realloc(arr2,(size)*sizeof(char*));
arr2[size]=malloc(50);
}
arr2[size]=ptr->d_name;
size++;
}
for(int i=0;i<size;i++)
{
printf("%s ",arr2[i]); //listing files and directories.
}
}
}
是的,你在我的代码中看不到free((,在我的真实代码中我正在做free((,所以问题出在realloc(我猜(。
int size=0;
在程序开始时,初始化大小等于ZERO
。
代码首次到达realloc
函数时:
arr2=realloc(arr2,(size)*sizeof(char*));
size
的值等于1
。因此,现在arr2
仅分配给指针char *
ONE
。然后你尝试访问arr2
的第二个值:
arr2[size]=malloc(50); // here, size = 1
您必须将 malloc 函数更改为:
arr2=realloc(arr2,(size+1)*sizeof(char*));
检查malloc
或realloc
函数的返回值更安全。因为有时它会失败,然后使您的程序运行不佳。