HEAP CORRUPTION DETECTED - C (СИ) (78860)

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

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

На строчке 36 с очисткой памяти постоянно вылетает ошибка дебага HEAP CORRUPTION DETECTED after Normal block (#202) at 0x000B6A58 CRT detected that the application wrote to memory after end of heap buffer. и подсвечивается
if (__active_heap == __SYSTEM_HEAP) { return HeapAlloc(_crtheap, 0, size ? size : 1); }
в malloc.h Подскажите, пожалуйста, что не так.
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
 
struct scan_info {
char model[25]; // наименование модели
int price;  // цена
double x_size;  // горизонтальный размер области сканирования
double y_size;  // вертикальный размер области сканирования
int optr;   // оптическое разрешение
int grey;   // число градаций серого
};
 
void addStructure(scan_info *, int*);
 
void main ()
{
 
    setlocale (LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
int i=0, j=0, n_of_items=0;
scan_info *input_item;
 
printf ("\nВведите количество записей: ");
scanf ("%d", &n_of_items);
input_item = new scan_info[n_of_items];
 
if (input_item == NULL) printf ("Ошибка выделения памяти"); 
 
addStructure(&input_item[n_of_items], &n_of_items);
 
for (i=0;i<n_of_items;i++) delete [] input_item;
system ("pause");
}
 
void addStructure(scan_info *input_item, int *n_of_items)
{
    for (int i=0;i<*n_of_items;i++)
        {
            printf ("\nВвод данных о сканере\n");
            fflush(stdin);
            printf ("Введите наименование модели сканера: ");
            scanf("%s",&input_item[i].model);
            fflush(stdin);
            printf ("Введите цену модели сканера: ");
            scanf("%d", &input_item[i].price);
            fflush(stdin);
            printf ("Введите горизонтальный размер области сканирования: ");
            scanf("%lf", &input_item[i].x_size);
            fflush(stdin);
            printf ("Введите вертикальный размер области сканирования: ");
            scanf("%lf", &input_item[i].y_size);
            fflush(stdin);
            printf ("Введите оптическое разрешение: ");
            scanf("%d", &input_item[i].optr);
            fflush(stdin);
            printf ("Введите число градаций серого: ");
            scanf("%d", &input_item[i].grey);
        }
}

Решение задачи: «HEAP CORRUPTION DETECTED»

textual
Листинг программы
void main ()
{
 
    setlocale (LC_ALL, "Russian");
   SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
int i=0, j=0, n_of_items=0;
scan_info *input_item;
 
printf ("\nВведите количество записей: ");
scanf ("%d", &n_of_items);
input_item = new scan_info[n_of_items];
 
if (input_item == NULL) printf ("Ошибка выделения памяти"); 
 
addStructure(input_item, &n_of_items);
 
 delete [] input_item;
system ("pause");
}

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

  1. Устанавливаются настройки локали и кодировки консоли на русский язык.
  2. Объявляются переменные i, j, n_of_items и input_item.
  3. Пользователю предлагается ввести количество записей.
  4. Создается массив input_item с помощью оператора new, выделяется память под n_of_items элементов.
  5. Проверяется успешность выделения памяти, если память не может быть выделена, выводится сообщение об ошибке.
  6. Вызывается функция addStructure для заполнения массива input_item.
  7. Выделяемая память очищается с помощью оператора delete.
  8. Выполняется системная команда pause, чтобы программа не закрылась сразу после вывода.

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


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

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

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