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

杰克·默罗
#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->filefopen(filename, "r"),但它造成分段错误。我一直在网上搜索并尝试解决此问题,但是没有任何效果。

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

塔德曼

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

CCSV *csv;

您应该分配:

CCSV *csv = malloc(sizeof(CCSV));

完成后,您也应该free()这样做。

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

CCSV *csv_open(char *filename) {    
    FILE* file = fopen(filename, "r");

    if (file == NULL)
        return NULL;

    CCSV *csv = malloc(sizeof(CCSV));

    csv->file = file;

    return csv;
}

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将值分配给指针结构会产生分段错误

为什么分配给指针会导致恐慌

为什么将智能指针重新分配给自身会导致破坏?

将内存分配给不同的结构会更改完全不同的结构的指针成员

为什么编码器将结构指针的值分配给静态结构?

将值分配给指针引用的结构的动态分配结构成员数组时,openacc错误

为什么以联合方式访问指针会导致分段错误?

将结构指针分配给双指针结构

为什么在移动指针后分配给指针成员仍然有效?

为什么为涉及指针的类型定义将指针分配给指针是非法的?

无法使用双指针将值分配给结构成员

将值分配给指针 C++ 时出现分段错误

如何将结构分配给结构的指针数组?

将值分配给我的结构的char成员时,C分段错误

将指针分配给多维数组时,为什么会出现“不兼容的指针类型”

为什么允许将常规指针分配给指向const的指针而不是相反?

在 C 中,如果将双指针分配给值,为什么指针变量为 0?

将变量的引用分配给指针会导致意外行为

C-尝试将函数的返回值分配给变量会导致分段错误

使用双指针将值分配给struct的成员

Golang:将值分配给作为指针的struct成员

将枚举成员分配给void指针?

使用指针将内存分配给结构

使用指针将内存分配给结构

无法将字符值分配给结构中的指针

将数据分配给 C 中的 typedef 结构时出现指针错误

为什么可以将结构函数分配给其他结构的成员?

为什么不能将数组的地址分配给指针?

为什么动态的字符串指针数组会导致分段错误?