Задача на работу с динамическим массивом. HEAP CORRUPTION DETECTED - C (СИ)
Формулировка задачи:
Не понимаю причину ошибки. Подскажите пожалуйста.
HEAP CORRUPTION DETECTED: after Normal block (#318) at 0x00FE03B0.
CRT detected that the application wrote to memory after end of heap buffer.
// pmArray.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <math.h> #include <clocale> #include <stdlib.h> #include <time.h> int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Russian"); setlocale(LC_ALL, "rus"); //Инициализируем функцию для заполнения массива случайным набором чисел. srand(time(NULL)); // Указывавем переменные для организации меню и подменю. int menu = 0; int menu1 = 0; int wasEntRM = 0; int wasEntEM = 0; int wasCalc = 0; //Задаем массив и его размер int size = 0; int *a = new int[size](); printf("Выберите пункт меню.\n"); do { printf("1. Ввести количество элементов массива.\n"); printf("2. Ввести значение элементов массива.\n"); printf("3. Обработать массив в соответствии с задачей.\n"); printf("4. Вывести результат обработки на экран.\n"); printf("5. Вывести количество четных и нечетных элементов массива.\n"); printf("0. Выход.\n"); scanf("%d", &menu); // Реализуем меню switch (menu) { case 1: do { printf("Введите размер массива: "); scanf("%d", &size); if (size == 0 || size < 0) { printf("ОШИБКА!!! Размер массива не может быть равен нулю или быть отрицательным!\n"); } } while (size == 0 || size < 0); wasEntRM = 1; wasEntEM = 0; wasCalc = 0; break; case 2: if (1 == wasEntRM) { printf("1. Ввести значения элементов массива с клавиатуры.\n"); printf("2. Заполнить элементы массива автоматически.\n"); scanf("%d", &menu1); //Реализуем подменю switch (menu1) { case 1: for (int i = 0; i < size; i++) { printf("Введите элемент №%d: ", i + 1); scanf("%d", &a[i]); } break; case 2: for (int i = 0; i < size; i++) { a[i] = rand() % 100; } break; } wasEntEM = 1; } else { printf("Сначала нужно ввести размер массива!\n"); printf("Выберите пункт меню 1.\n"); } //Сообщаем пользователю о введенных значениях элемента массива printf("Введены следующие значения: \n"); for (int i = 0; i < size; i = i + 1) { printf("%d", a[i]); if (i == size - 1) { printf("\n"); } else { printf(", "); } } break; case 3: if (wasEntEM != 0) { for (int i = 2; i < size; i = i + 2) //NB!: Поменять "int i = 2" на "int i = 0" если а[0] нужно считать за четный элемент массива { if (a[i] < 0) { a[i] = a[i] - (a[i] * 2); } else if (a[i] > 0) { a[i] = a[i] + (a[i] * (-2)); } else { a[i] = a[i]; } } printf("Массив обработан успешно.\n"); wasCalc = 1; } else { printf("Сначала нужно ввести элементы массива!\n"); printf("Выберите пункт меню 2.\n"); } break; case 4: //Вывод результата изменения знака элемента массива if (wasCalc != 0) { printf("Результат: \n"); for (int i = 0; i < size; i = i + 1) { printf("%d", a[i]); if (i == size - 1) { printf("\n"); } else { printf(", "); } } } else { printf("Сначала нужно обработать массив!\n"); printf("Выберите пункт меню 3.\n"); } break; case 5: if (wasCalc != 0) { // Задаем переменные для подсчета положительных и отрицательных элементов массива int aPlus = 0; int aMinus = 0; for (int i = 0; i < size; i = i + 1) { if (a[i] > 0) { aPlus = aPlus + 1; } else if (a[i] < 0) { aMinus = aMinus + 1; } } printf("Количество положительных элементов массива равно: %d\n", aPlus); printf("Количество отрицательных элементов массива равно: %d\n", aMinus); } else { printf("Сначала нужно обработать массив!\n"); printf("Выберите пункт меню 3.\n"); } break; case 0: break; default: printf("Неверный пункт меню!\n"); } } while (menu != 0); delete [] a; getchar(); getchar(); return 0; }
Решение задачи: «Задача на работу с динамическим массивом. HEAP CORRUPTION DETECTED»
textual
Листинг программы
#include <locale.h>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д