我正在处理以下文本文件:YkgsLWL3nORLg和以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int id;
char lastname[25];
char name[20];
float average;
}student;
int main(){
int i;
student *pointer= (student*) malloc(3);
FILE *file= fopen("Struct.txt", "r");
fread(pointer, sizeof(student), 3, file);
for(i= 0; i< 3; i++){
printf("Id: %d\nName: %s\nLast name: %s\nAverage: %.2f\n",
(pointer+ i) -> id,
(pointer+ i) -> name,
(pointer+ i) -> lastname,
(pointer+ i) -> average);
}
fclose(file);
system("pause");
return 0;
}当我删除fclose函数时,它可以工作,但我检查了它,并且似乎是正确的。我遗漏了什么?
发布于 2015-11-15 05:01:30
它与您的fclose无关,相反,您需要修复两件事:
fopen的返回错误:
如果(空==文件){ printf(“无法打开\n”);退出(1 );}student *pointer= malloc(3 * sizeof(student));发布于 2015-11-15 05:09:40
你的程序没有按照你想的那样分配内存。malloc(3) 返回三个字节的内存。.文件指针很可能紧跟在内存中的后面。
[ | | ][*FILE]当您读取文件时,数据首先进入您已分配的三个字节的内存中。但是由于它不适合,所以它继续运行,并覆盖包含指向文件的指针的内存。
[student data student data]然后调用fclose将在dat或其他从文件中读取的文件关闭。这是一个编程错误,有时被称为“野生指针取消引用”,如果读取的数据没有指向可以关闭的东西,就像文件可以(就像您正在发生的那样)那样,程序就会崩溃。
artm建议的修复应该可以解决您的问题,但是我认为这个解释可能会帮助您理解为什么您看到了崩溃。
https://stackoverflow.com/questions/33716575
复制相似问题