Бинарные файлы, стек вокруг переменной «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
- инициализируется как указатель на структуруst1
st1
- структура, на которую указываетpaka1
f
- файловый дескриптор, через который происходит чтение из файлаsizeof(st1)
- размер структурыst1
в байтах1
- количество элементов, которые необходимо прочитать из файла
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д