簡體   English   中英

為什么將文件指針分配給結構指針成員會導致分段錯誤?

[英]Why is assigning a file pointer to a structure pointer member causing a segmentation fault?

#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 function,我試圖將csv->file分配給fopen(filename, "r") ,但這會導致分段錯誤。 我一直在網上搜索並試圖解決這個問題,但沒有任何效果。

為什么將文件指針分配給結構指針成員會導致分段錯誤?

此行創建了一個指針,但該指針未初始化且未分配:

CCSV *csv;

你應該分配:

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

完成后,您還應該free()這個。

在 C 中,您需要非常小心地釋放您分配的任何 memory。 您定義此 function 的方式會在錯誤時泄漏 memory。 為了解決這個問題,重新組織一下:

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;
}

這樣,如果出現錯誤,您將無法進入分配階段,但如果您進行分配,您將返回它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM