Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自制arrayList中的Coredump_C_File_Coredump - Fatal编程技术网

自制arrayList中的Coredump

自制arrayList中的Coredump,c,file,coredump,C,File,Coredump,我目前正在做一个家庭作业评估,我正在编写一个程序,将文本文件与ascii图像拼接在一起,以创建所有片段的完整图像。我打算编写代码的方式是使用while循环在目录中查找部件并将其添加到数组中。然而,在我的AddFile方法中(或者当我精确地调用它时),我得到了一个coredump。。我刚开始使用c,所以我不知道你们中的一些人是否很清楚为什么我会得到一个coredump或者更复杂的。另外,我最初编写addFile方法是为了使用和接受int而不是文件类型,当时它在没有任何coredumps的情况下工作

我目前正在做一个家庭作业评估,我正在编写一个程序,将文本文件与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;
}
#包括
#包括
类型定义结构{
int列表大小;
能力;
文件*文件流;
}文件清单;
void addFile(文件列表*列表,文件文件)
{

如果((*list).listSize对
addFile()
的调用正在取消对
文件的引用*
,生成类型为
FILE
的值。这是错误的,这是一个不透明的类型,应该始终由指针来处理。

为什么要使用“(*list”)`而不是
列表->
?少写两个字符,应该相当省时。:)我还建议您看看这个函数。您应该看看第一次分配的
fileStream