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.
и подсвечивается
в malloc.h
Подскажите, пожалуйста, что не так.
if (__active_heap == __SYSTEM_HEAP) {
return HeapAlloc(_crtheap, 0, size ? size : 1);
}
#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"); }
Объяснение кода листинга программы
- Устанавливаются настройки локали и кодировки консоли на русский язык.
- Объявляются переменные
i
,j
,n_of_items
иinput_item
. - Пользователю предлагается ввести количество записей.
- Создается массив
input_item
с помощью оператораnew
, выделяется память подn_of_items
элементов. - Проверяется успешность выделения памяти, если память не может быть выделена, выводится сообщение об ошибке.
- Вызывается функция
addStructure
для заполнения массиваinput_item
. - Выделяемая память очищается с помощью оператора
delete
. - Выполняется системная команда
pause
, чтобы программа не закрылась сразу после вывода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д