我现在正在做一个家庭作业评估,我正在编写一个程序,用一个ascii图像来缝合文本文件,从而创建所有文件的完整图像。我打算编写代码的方式是让while循环遍历一个目录,查找这些部分并将它们添加到数组中。但是在我的AddFile方法中(或者当我精确地调用它时),我得到了一个coredump。。我刚开始和c一起工作,所以我不知道对于你们中的一些人来说,为什么我会得到一个coredump或者更复杂的东西。另外,我最初编写addFile方法是为了使用和接受int而不是文件类型,在这一点上,它在没有任何coredumps的情况下工作得很好,所以我怀疑(但我可能错了)当我试图用文件类型实现它时它出错了。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int listSize;
int listCapacity;
FILE *fileStream;
}FileList;
void addFile(FileList* list, FILE file)
{
if((*list).listSize<(*list).listCapacity)
{
(*list).fileStream[(*list).listSize]=file;
(*list).listSize+=1;
}
else
{
FILE *tempArray = calloc((*list).listSize,sizeof(FILE));
for(int i=0; i<(*list).listSize; i++)
{
tempArray[i]=(*list).fileStream[i];
}
//Do something with array...
free((*list).fileStream);
(*list).listCapacity=((*list).listCapacity)*2;
(*list).fileStream=calloc((*list).listCapacity,sizeof(FILE));
for(int i=0; i<(*list).listSize; i++)
{
(*list).fileStream[i]=tempArray[i];
}
(*list).fileStream[(*list).listSize]=file;
(*list).listSize+=1;
free(tempArray);
}
}
int main()
{
FileList intList;
intList.listSize=0;
intList.listCapacity=1;
intList.fileStream=calloc(intList.listCapacity,sizeof(int));
int fileYcoord=0;
int fileXcoord=0;
while(1)
{
char fileName [100];
int fileNameLength=sprintf(fileName,"part_%02d-%02d",fileXcoord,fileYcoord);
FILE * pFile = fopen (fileName,"r");
if(pFile!=NULL)
{
printf("- ! found file: %s - name length : %d \n",fileName,fileNameLength);
addFile(&intList,*pFile);
fclose(pFile);
fileXcoord++;
}
else
{
if(fileXcoord!=0)
{
fileYcoord+=1;
fileXcoord=0;
}
else
{
break;
}
}
}
printf("size %d , %d",fileXcoord, fileYcoord);
free(intList.fileStream);
return 0;
}
最佳答案
对addFile()
的调用正在取消对aFILE *
的引用,产生类型为FILE
的值。这是错误的,这是一个不透明类型,应该始终由指针处理。