Бинарные файлы, стек вокруг переменной «paka1» был поврежден - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#pragma pack (show)
typedef struct DATA_NO_OP{
char name[31]; // имя, фамилия
short int age; // возраст, полных лет
char gender; // пол, мужской, женский
short int mean; // средний балл успеваемости
} st1;
#pragma pack (push)
#pragma pack (1)
#pragma pack (show)
typedef struct DATA_OP{
char name[31]; // имя, фамилия
short int age; // возраст, полных лет
char gender; // пол, мужской, женский
short int mean; // средний балл успеваемости
} st2;
#pragma pack (pop)
#pragma pack (show)
void createST1(st1* pak){
pak->age = 0;
pak->gender = 'M';
pak->mean = 0;
memset(&pak->name,'\0',31);
strcpy(pak->name,"NAME_SURNAME");
}
void createST2(st2* pak){
pak->age = 0;
pak->gender = 'W';
pak->mean = 0;
memset(&pak->name,'\0',31);
strcpy(pak->name,"NAME_SURNAME");
}
void zapisVfailst1 (st1* pak,FILE* f){
rewind(f);
fwrite(&pak,sizeof(struct DATA_NO_OP),1,f);
rewind(f);
}
void zapisVfailst2 (st2* pak,FILE* f){
rewind(f);
fwrite(&pak,sizeof(struct DATA_OP),1,f);
rewind(f);
}
void vivodIzfailIconst1(FILE* f){
st1 *paka1 = (st1*) malloc(sizeof(st1));
rewind(f);
fread(&paka1,sizeof(st1),1,f);
printf("\n\tВывод из файла st1:");
printf("\n\t %s",paka1->name);
printf("\n\t %d",paka1->age);
printf("\n\t %c",paka1->gender);
printf("\n\t %d",paka1->mean);
//free(paka1);
/*rewind(f);
printf("\n\t_______");*/
}
void vivodIzfailIconst2(FILE* f){
st2 *paka1 = (st2*) malloc(sizeof(st2));
fread(&paka1,sizeof(st2),1,f);
printf("\n\tВывод из файла st2:");
printf("\n\t %s",paka1->name);
printf("\n\t %d",paka1->age);
printf("\n\t %c",paka1->gender);
printf("\n\t %d",paka1->mean);
//free(paka1);
//rewind(f);
}
int main (){
FILE *F1,*F2;
st1 *massNoOp =(st1*) malloc(sizeof(st1));
st2 *massOp =(st2*) malloc(sizeof(st2));
createST1(massNoOp);
printf("\n\t %s , %d ,%c, %d",massNoOp->name,massNoOp->age,massNoOp->gender,massNoOp->mean);
createST2(massOp);
printf("\n\t %s , %d ,%c, %d",massOp->name,massOp->age,massOp->gender,massOp->mean);
F1 = fopen("18_6NOOP.bin","wb+");
F2 = fopen("18_6OP.bin","wb+");
zapisVfailst1(massNoOp,F1);
zapisVfailst2(massOp,F2);
vivodIzfailIconst1(F1);
vivodIzfailIconst2(F2);
fclose(F1);
fclose(F2);
free(massNoOp);
free(massOp);
printf ("\t\nsizeof (struct st1) = %d\n", sizeof (struct DATA_NO_OP));
printf ("\t\nsizeof (struct st2) = %d\n", sizeof (struct DATA_OP));
printf("\n\t");
system("pause");
return 0;
}Решение задачи: «Бинарные файлы, стек вокруг переменной «paka1» был поврежден»
textual
Листинг программы
st1 *paka1 = (st1*) malloc(sizeof(st1)); fread(&paka1,sizeof(st1),1,f);
Объяснение кода листинга программы
paka1- инициализируется как указатель на структуруst1st1- структура, на которую указываетpaka1f- файловый дескриптор, через который происходит чтение из файлаsizeof(st1)- размер структурыst1в байтах1- количество элементов, которые необходимо прочитать из файла