为什么将文件指针分配给结构指针成员会导致分段错误?

时间:2020-08-13 05:09:33

标签: c pointers

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

typedef struct CCSV {
    FILE *file;
} CCSV;

CCSV *csv_open(char *filename) {    
    CCSV *csv;

    csv->file = fopen(filename, "r");

    if (csv->file == NULL)
        return NULL;

    return csv;
}

int main(void) {
    CCSV *csv = csv_open("cars.csv");

    if (csv == NULL) {
        puts("CSV File doesn't exist.");
    }

    return 0;
}

特别是使用csv_open函数,我正在尝试为csv->file分配fopen(filename, "r"),但这会导致分段错误。我一直在网上搜索并尝试解决此问题,但是没有任何效果。

为什么将文件指针分配给结构指针成员会导致分段错误?

1 个答案:

答案 0 :(得分:5)

此行创建一个指针,但是此指针未初始化和未分配:

char buff[10]={0};
char buff1[6]="xxxxx";
sprintf(buff,"My name is %s");

您应该分配:

CCSV *csv;

完成后,您还应该CCSV *csv = malloc(sizeof(CCSV));

在C语言中,您需要非常小心地释放已分配的所有内存。您定义此函数的方式会在发生错误时泄漏内存。要解决此问题,请重新整理一下:

free()

这样,如果出现错误,您将不会进入分配阶段,但是如果您分配了错误,则将其返回。

相关问题