C语言 用重新分配进行分配



我正在尝试列出特定目录的子目录文件。但是,我收到错误"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*));

检查mallocrealloc函数的返回值更安全。因为有时它会失败,然后使您的程序运行不佳。

最新更新