Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
-20 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 49

Динамическая матрица с контролем корректности размерности и успешности выделения динамической области памяти

12.01.2019, 04:06. Показов 2774. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать двумерный динамический массив вещественного типа, размерность и содержимое элементов
которого задается пользователем с клавиатуры. Проверить корректность размерности и успешность
выделения динамической области памяти под массив. При вводе пользователем ошибочной размерности в
цикле сообщить ему об этом и обеспечить ввод пользователем новых значений до тех пор, пока он не введет
корректные данные.
Накидайте код пожайлуста , кому не трудно конечно(12.1)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2019, 04:06
Ответы с готовыми решениями:

Фукция выделения динамической памяти
#include <iostream> using namespace std; int* form_odn (int a) {int *mas= new int; return mas; } void main () {setlocale...

Диагностика выделения динамической памяти
Здравствуйте, господа знатоки. Подскажите, пожалуйста, как проверить, было ли выделение памяти из кучи успешным. Мне нужен аналог кода...

Алгоритм выделения динамической памяти
Объясните пожалуйста на словах, алгоритм выделения динамической памяти под двухмерный массив. float **ptrarray = new float* ; for...

32
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
12.01.2019, 14:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <ctime>
 
int main()
{
    SetConsoleOutputCP(1251); //Вывод русских букв
    srand(time(0));
 
    unsigned int a(0), b(0);
    int **array = new int* [a]; //а строк в массиве
 
    printf("Введите количество строк: ");
    scanf_s("%i", &a);
    printf("Введите количество столбцов: ");
    scanf_s("%i", &b);
 
    while(a <= 0 || b <= 0)
    {
        system("cls");
        printf("Введите количество строк: ");
        scanf_s("%i", &a);
        printf("Введите количество столбцов: ");
        scanf_s("%i", &b);
    }
 
    for (int count = 0; count < a; count++)
    {
        array[count] = new int[b]; //b столбцов в массиве
    }
 
    for(int rows = 0; rows < a; rows++)
    {
        for (int columns = 0; columns < b; columns++)
        {
            array[rows][columns] = 1 + rand() % 10; //Заполнение массива случайными числами от 1 до 10
        }
    }
 
    for (int pRows = 0; pRows < a; pRows++)
    {
        for (int pColumns = 0; pColumns < b; pColumns++)
        {
            printf("%i ", array[pRows][pColumns]); //Вывод массива
        }
        printf("\n");
    }
 
    for(int count = 0; count < a; count++)
        delete[] array[count]; //Освобождение памяти
 
    system("pause");
    return 0;
}
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
12.01.2019, 19:12
proirp, нет двумерного массива, нет проверок выделения памяти, нет освобождения памяти.
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
13.01.2019, 19:12
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
нет двумерного массива, нет проверок выделения памяти, нет освобождения памяти.
Да как же? Динамический двумерный массив, освобождение в самом конце программы.
Как проверку сделать не знаю.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.01.2019, 19:17
Цитата Сообщение от proirp Посмотреть сообщение
C++
1
2
    unsigned int a(0), b(0);
    int **array = new int* [a]; //а строк в массиве
Какой объем памяти выделяется?
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
13.01.2019, 19:23
Цитата Сообщение от valen10 Посмотреть сообщение
Какой объем памяти выделяется?
а * 4 байта
В последствии, после создания столбцов а * b * 4 байта
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
13.01.2019, 19:26
Цитата Сообщение от proirp Посмотреть сообщение
а * 4 байта
0 * 4 байта = ?
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
13.01.2019, 19:29
Цитата Сообщение от valen10 Посмотреть сообщение
0 * 4 байта = ?
Я понимаю, к чему Вы клоните. Но как же, тогда, задать размеренность вручную?
Разве что, инициализировать массив после присваивания a и b значений.
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
13.01.2019, 19:33
Цитата Сообщение от proirp Посмотреть сообщение
Разве что, инициализировать массив после присваивания a и b значений.

Не по теме:

так и надо

0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
13.01.2019, 19:35
Цитата Сообщение от ReDoX Посмотреть сообщение
так и надо
Блин, я не могу отредактировать сообщение уже..
А можно так же со статическими массивами поступать? Или там только константную размеренность указывать?
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
13.01.2019, 20:02
Цитата Сообщение от proirp Посмотреть сообщение
А можно так же со статическими массивами поступать? Или там только константную размеренность указывать?
у статических только константная размерность, вычислить которую можно во время компиляции
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
13.01.2019, 20:03
Цитата Сообщение от ReDoX Посмотреть сообщение
у статических только константная размерность, вычислить которую можно во время компиляции

Не по теме:

Понял, спасибо!

0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
14.01.2019, 12:11
Цитата Сообщение от proirp Посмотреть сообщение
Да как же? Динамический двумерный массив
int **array = new int* [a]; это не двумерный массив (массив массивов), а массив указателей.
Цитата Сообщение от proirp Посмотреть сообщение
освобождение в самом конце программы
В какой там строчке delete [] array; находится, подскажите. А то я что-то не увидел.
Цитата Сообщение от proirp Посмотреть сообщение
Как проверку сделать не знаю.
Можно в стиле С++ через обработку исключений, можно запретить исключение через noexcept() и проверять на NULL в Си-стиле.
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
14.01.2019, 12:33
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В какой там строчке delete [] array; находится, подскажите. А то я что-то не увидел.
Но как же? 50-51 строчки. Разве же это не удаление?
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
int **array = new int* [a]; это не двумерный массив (массив массивов), а массив указателей.
А как же создать двумерный? Мне казалось, что именно так.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.01.2019, 13:16
proirp, например так:
C++
1
2
3
4
int** a = new int*[row_count];
for(int i = 0; i < rowCount; ++i) {
    a[i] = new int[column_count];
}
Цитата Сообщение от proirp Посмотреть сообщение
А как же создать двумерный? Мне казалось, что именно так.
Но стоит помнить что динамический двумерный массив - это не массив указателей на массивы.
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
14.01.2019, 13:51
Цитата Сообщение от Azazel-San Посмотреть сообщение
например так:
Но я же так и сделал:
C++
1
2
3
4
for (int count = 0; count < a; count++)
    {
        array[count] = new int[b]; //b столбцов в массиве
    }
Только почему то размеренность b (столбцов) сделал после того, как юзер введет значение, а размеренность а (строк) до этого. То есть,
C++
1
int **array = new int* [a]; //а строк в массиве
тут у меня неизвестно, сколько памяти выделять.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.01.2019, 14:01
Цитата Сообщение от proirp Посмотреть сообщение
тут у меня неизвестно, сколько памяти выделять.
выделив память раз, перевыделить ее изменением размерности не выйдет, изменение размерности строк, не изменит размера реально выделенной памяти. Динамический массив, это просто указатель на блок памяти выделенный не на стеке, а в куче.
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
14.01.2019, 14:04
Azazel-San, так, а почему же мне говорят, что у меня не двумерный массив тогда? Вот же я создаю его:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
unsigned int a(0), b(0);
    int **array = new int* [a]; //а строк в массиве
 
// Ввод размеренности
    printf("Введите количество строк: ");
    scanf_s("%i", &a);
    printf("Введите количество столбцов: ");
    scanf_s("%i", &b);
 
//Повтор ввода, если размеренность столбцов/строк равна нулю
    while(a <= 0 || b <= 0)
    {
        system("cls");
        printf("Введите количество строк: ");
        scanf_s("%i", &a);
        printf("Введите количество столбцов: ");
        scanf_s("%i", &b);
    }
 
    for (int count = 0; count < a; count++)
    {
        array[count] = new int[b]; //b столбцов в массиве
    }
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.01.2019, 14:37
proirp, незнаю, это не я писал)
возможно имелось ввиду, что он бесполезен, т.к. его размер равен 0. Хотя даже не 0, там может быть что угодно, потенциальное место под UB?
0
73 / 29 / 1
Регистрация: 31.07.2013
Сообщений: 433
14.01.2019, 14:42
Цитата Сообщение от Azazel-San Посмотреть сообщение
это не я писал)
Я понимаю.
Цитата Сообщение от Azazel-San Посмотреть сообщение
т.к. его размер равен 0
Почему 0? Мне стоило инициализировать массив после ввода размеренности, чтобы у него размер был
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2019, 14:42
Помогаю со студенческими работами здесь

Ошибка выделения динамической памяти
IDE VS 2015. Собственно есть решение, состоящее из двух проектов. Первый это статическая библиотека #pragma once extern...

Принцип выделения места в динамической памяти
Есть такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { const int size = 500; int*...

Работа с массивами с использованием выделения динамической памяти
Помогите решить вот такие задачи: Задача №1 Дана последовательность чисел b1,...,bn. Получить квадратную матрицу порядка n, элементами...

Проверить корректность двух способов выделения динамической памяти
Решил задачку на динамическое выделение памяти, двумя способами. Так вот сам вопрос: подскажите, какое решение более...

Динамическая память. Двунаправленный список в динамической памяти
Создать в динамической памяти двунаправленный замкнутый список произвольной длины из элементов типа REAL. Написать процедуру, которая по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru