Правильно выделить и освободить память - C (СИ)
Формулировка задачи:
Помогите,пожалуйста, правильно Народ,подскажите,пожалуйста.К этой программе мне нужно сделать
выделить
иосвободить
память.Чтобы не было утечек памяти.
#include <stdio.h> #include <Windows.h> #include <locale.h> #include <time.h> #define CRTDBG_MAP_ALLOC #include <crtdbg.h> int main() { setlocale(0, ""); srand(time(NULL)); int **a = NULL; int height = 0; int width = 0; int sort; int numb = 0; int numb2 = 0; int t = 0; printf("Программа сортировки строк двухмерного динамического массива по возрастанию\n\n"); do { fflush(stdin); printf("1. Задать размерность двухмерного массива\n"); printf("2. Выбор заполнения массива\n"); printf("3. Обработка массива\n"); printf("4. Вывод обработанного массива на экран\n"); printf("0. Выход и программы\n"); scanf_s("%d", &numb); system("cls"); switch(numb) { case 1: { for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; do { fflush(stdin); printf("Введите размерность массива: "); printf("\nШирина:> "); scanf_s("%d", &width); printf("Высота:> "); scanf_s("%d", &height); system("cls"); } while ( height <= 0 || width <= 0); a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } t = 1; break; } case 2: { if ( t > 0 ) { for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; do { fflush(stdin); printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n"); scanf_s("%d", &numb2); system("cls"); } while ( numb2 != 1 && numb2 != 2 ); a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } switch (numb2) { case 1: { printf("Заполните массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1); scanf_s("%d", &a[i][j]); } system("cls"); } break; } case 2: { printf("Массив заполнен рандомно"); getchar(); getchar(); system("cls"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { a[i][j] = rand() % 50 - 25; } } break; } } t = 2; } else { printf("Задайте размерность массива\n"); getchar(); getchar(); system("cls"); } break; } case 3: { if ( t == 2 ) { printf("Вот сам массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); for ( int j = 0; j < width; j ++ ) { for ( int i = 1; i < height; i ++ ) { for ( int k = 1; k < height; k ++ ) { if ( a[k - 1][j] > a[k][j] ) { sort = a[k - 1][j]; a[k - 1][j] = a[k][j]; a[k][j] = sort; } } } } printf("Массив обработан\n"); getchar(); system("cls"); t = 2; } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } break; } case 4: { if ( t == 2 ) { printf("Вот обработанный массив\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); } else { printf("Сделаете предыдущий шаг"); getchar(); getchar(); system("cls"); } break; } } } while ( numb != 0 ); _CrtDumpMemoryLeaks(); for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; return 0; }
промежуточное хранение данных
.Что это вообще такое?Решение задачи: «Правильно выделить и освободить память»
textual
Листинг программы
int **a = NULL; a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; }
Объяснение кода листинга программы
- Объявляется двумерный массив
a
типа int** и инициализируется значением NULL. - Выделяется память под массив указателей на int с помощью оператора new, где height - размер первого измерения, а width - размер второго измерения.
- В цикле for, который выполняется height раз, для каждого элемента массива a[i] выделяется память под массив int с помощью оператора new.
- Каждое значение a[i] будет представлять собой массив int, а каждое значение a[i][j] будет представлять собой отдельное целое число.
- После выполнения всех операций, необходимо освободить выделенную память с помощью оператора delete.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д