如何解决为什么将文件指针分配给结构指针成员会导致分段错误?
#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")
,但这会导致分段错误。我一直在网上搜索并尝试解决此问题,但是没有任何效果。
为什么将文件指针分配给结构指针成员会导致分段错误?
解决方法
此行创建一个指针,但是此指针未初始化和未分配:
char buff[10]={0};
char buff1[6]="xxxxx";
sprintf(buff,"My name is %s");
您应该分配:
CCSV *csv;
完成后,您还应该CCSV *csv = malloc(sizeof(CCSV));
。
在C语言中,您需要非常小心地释放已分配的所有内存。您定义此函数的方式会在发生错误时泄漏内存。要解决此问题,请重新整理一下:
free()
这样,如果出现错误,您将不会进入分配阶段,但是如果您分配了错误,则将其返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。