Бинарные файлы, стек вокруг переменной «paka1» был поврежден - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #pragma pack (show)
  6. typedef struct DATA_NO_OP{
  7. char name[31]; // имя, фамилия
  8. short int age; // возраст, полных лет
  9. char gender; // пол, мужской, женский
  10. short int mean; // средний балл успеваемости
  11. } st1;
  12. #pragma pack (push)
  13. #pragma pack (1)
  14. #pragma pack (show)
  15. typedef struct DATA_OP{
  16. char name[31]; // имя, фамилия
  17. short int age; // возраст, полных лет
  18. char gender; // пол, мужской, женский
  19. short int mean; // средний балл успеваемости
  20. } st2;
  21. #pragma pack (pop)
  22. #pragma pack (show)
  23. void createST1(st1* pak){
  24. pak->age = 0;
  25. pak->gender = 'M';
  26. pak->mean = 0;
  27. memset(&pak->name,'\0',31);
  28. strcpy(pak->name,"NAME_SURNAME");
  29. }
  30. void createST2(st2* pak){
  31. pak->age = 0;
  32. pak->gender = 'W';
  33. pak->mean = 0;
  34. memset(&pak->name,'\0',31);
  35. strcpy(pak->name,"NAME_SURNAME");
  36. }
  37. void zapisVfailst1 (st1* pak,FILE* f){
  38. rewind(f);
  39. fwrite(&pak,sizeof(struct DATA_NO_OP),1,f);
  40. rewind(f);
  41. }
  42. void zapisVfailst2 (st2* pak,FILE* f){
  43. rewind(f);
  44. fwrite(&pak,sizeof(struct DATA_OP),1,f);
  45. rewind(f);
  46. }
  47. void vivodIzfailIconst1(FILE* f){
  48. st1 *paka1 = (st1*) malloc(sizeof(st1));
  49. rewind(f);
  50. fread(&paka1,sizeof(st1),1,f);
  51. printf("\n\tВывод из файла st1:");
  52. printf("\n\t %s",paka1->name);
  53. printf("\n\t %d",paka1->age);
  54. printf("\n\t %c",paka1->gender);
  55. printf("\n\t %d",paka1->mean);
  56. //free(paka1);
  57. /*rewind(f);
  58. printf("\n\t_______");*/
  59. }
  60. void vivodIzfailIconst2(FILE* f){
  61. st2 *paka1 = (st2*) malloc(sizeof(st2));
  62. fread(&paka1,sizeof(st2),1,f);
  63. printf("\n\tВывод из файла st2:");
  64. printf("\n\t %s",paka1->name);
  65. printf("\n\t %d",paka1->age);
  66. printf("\n\t %c",paka1->gender);
  67. printf("\n\t %d",paka1->mean);
  68. //free(paka1);
  69. //rewind(f);
  70. }
  71. int main (){
  72. FILE *F1,*F2;
  73. st1 *massNoOp =(st1*) malloc(sizeof(st1));
  74. st2 *massOp =(st2*) malloc(sizeof(st2));
  75. createST1(massNoOp);
  76. printf("\n\t %s , %d ,%c, %d",massNoOp->name,massNoOp->age,massNoOp->gender,massNoOp->mean);
  77. createST2(massOp);
  78. printf("\n\t %s , %d ,%c, %d",massOp->name,massOp->age,massOp->gender,massOp->mean);
  79. F1 = fopen("18_6NOOP.bin","wb+");
  80. F2 = fopen("18_6OP.bin","wb+");
  81. zapisVfailst1(massNoOp,F1);
  82. zapisVfailst2(massOp,F2);
  83. vivodIzfailIconst1(F1);
  84. vivodIzfailIconst2(F2);
  85. fclose(F1);
  86. fclose(F2);
  87. free(massNoOp);
  88. free(massOp);
  89. printf ("\t\nsizeof (struct st1) = %d\n", sizeof (struct DATA_NO_OP));
  90. printf ("\t\nsizeof (struct st2) = %d\n", sizeof (struct DATA_OP));
  91. printf("\n\t");
  92. system("pause");
  93. return 0;
  94. }
Ошибка происходит при завершении функции vivodIzfailIconst1, данные считывает правильно.

Решение задачи: «Бинарные файлы, стек вокруг переменной «paka1» был поврежден»

textual
Листинг программы
  1. st1 *paka1 = (st1*) malloc(sizeof(st1));
  2. fread(&paka1,sizeof(st1),1,f);

Объяснение кода листинга программы

  1. paka1 - инициализируется как указатель на структуру st1
  2. st1 - структура, на которую указывает paka1
  3. f - файловый дескриптор, через который происходит чтение из файла
  4. sizeof(st1) - размер структуры st1 в байтах
  5. 1 - количество элементов, которые необходимо прочитать из файла

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы