[英]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.