我正在尝试从两个目录读取并将其内容放入两个动态数组中当我阅读时,我会遇到SEG错误。我唯一能看到它会添加的地方?
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char** argv) {
// get directory parameters
DIR *dirA;
DIR *dirB;
struct dirent *dA;
struct dirent *dB;
//check if dir A exists
if (!(dirA = opendir(argv[1])))
fprintf(stderr,"Failed to open directory %s n",argv[1]);
//check if dir B exists
if (!(dirB = opendir(argv[2])))
fprintf(stderr,"Failed to open directory %s n",argv[2]);
//open dir
dirA= opendir(argv[1]);
dirB= opendir(argv[2]);
int sizeA;
int sizeB;
while (0!= (dA = readdir(dirA)))
{
sizeA++;
}
while (0!= (dB = readdir(dirB)))
{
sizeB++;
}
char**contentsA;
char**contentsB;
contentsA=(char**)(malloc(80*sizeof(char*)));
contentsB=(char**)(malloc(80*sizeof(char*)));
int i=0;
while (0!= (dA = readdir(dirA)))
{
contentsA[i]=dA->d_name;
i++;
}
i=0;
while (0!= (dB = readdir(dirB)))
{
contentsB[i]=dB->d_name;
}
for ( i=0; i<sizeA; i++)
{
printf("%sn", contentsA[i]);
}
for ( i=0; i<sizeB; i++)
{
printf("%sn", contentsB[i]);
}
printf("size a = %d n size b = %dn", sizeA, sizeB);
return (EXIT_SUCCESS);
}
我认为问题可能在最后一个循环
有很多错误。
一个是您要从目录条目中存储名称指针,而不是复制字符串数据。您只是复制指针,该指针指向您不拥有的内存。所有名称都很可能指向内存中的同一位置。
此外,您永远不会使用每个目录中的项目计数,而是硬码80条条目。如果有80多个,您将覆盖随机内存。
您还应该关闭目录并重新打开该目录,或者(更好)第二次循环之前,请致电rewinddir()
,否则您的目录流耗尽。