1 | ||||||
Как создать динамический двумерный массив30.03.2016, 19:32. Показов 37888. Ответов 4
Метки нет (Все метки)
Здравствуйте. Не знаю как объявить двумерный массив. Пытался так сделать не подходит
0
|
30.03.2016, 19:32 | |
Ответы с готовыми решениями:
4
Как создать динамический двумерный массив и самому его заполнить? Используя malloc и realloc создать двумерный динамический массив Создать двумерный динамический массив для переменных произвольного типа Как задать двумерный динамический массив |
13 / 13 / 5
Регистрация: 02.01.2014
Сообщений: 60
|
||||||
30.03.2016, 22:51 | 2 | |||||
0
|
7 / 7 / 3
Регистрация: 22.09.2015
Сообщений: 173
|
||||||||||||||||
08.05.2016, 23:54 | 3 | |||||||||||||||
Сам же и нашел ошибку, так правильно:
0
|
0 / 0 / 0
Регистрация: 13.05.2020
Сообщений: 1
|
||||||
12.11.2020, 00:26 | 4 | |||||
0
|
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,222
|
|||||||||||
12.11.2020, 07:44 | 5 | ||||||||||
Aliksan, не совсем, malloc может вернуть NULL в случае, если память по каким-то причинам не была выделена, и ваша программа должна на это как-то реагировать, например:
==3437== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==3437== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info 3 7 83 86 77 15 93 35 86 92 49 21 62 27 90 59 63 26 40 26 72 36 11 ==3437== HEAP SUMMARY: ==3437== in use at exit: 0 bytes in 0 blocks ==3437== total heap usage: 6 allocs, 6 frees, 2,156 bytes allocated ==3437== ==3437== All heap blocks were freed -- no leaks are possible ==3437== ==3437== For lists of detected and suppressed errors, rerun with: -s ==3437== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) Добавлено через 11 минут Если обратить внимание на количество операций alloc в выводе валгринда. можно заметить, что на массив 3х7 понадобилось 4 таких операции. Есть другой способ, более экономичный:
==3640== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==3640== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info >> 3 7 2.50 1.50 1.25 4.20 4.20 4.33 0.50 4.20 1.33 0.50 2.25 5.00 1.25 0.20 3.25 3.50 1.20 4.25 2.25 2.50 4.50 ==3640== HEAP SUMMARY: ==3640== in use at exit: 0 bytes in 0 blocks ==3640== total heap usage: 4 allocs, 4 frees, 2,156 bytes allocated ==3640== ==3640== All heap blocks were freed -- no leaks are possible ==3640== ==3640== For lists of detected and suppressed errors, rerun with: -s ==3640== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) Как видно, в этом случае требуется всего два обращения к памяти, что в два раза меньше. Самое приятное, что при любом размере массива нам всегда понадобится ровно два вызова malloc для запроса памяти под массив и ровно два free для освобождения этой памяти в конце программы. На первый взгляд разница незначительная. Но предположим, что у нас есть двумерный массив, который хранит цвет каждого пикселя картинки 1920 х 1080. Просто на то, чтобы создать такой массив первым способом, понадобится 1081 вызов malloc() Вторым - по-прежнему всего 2.
1
|
12.11.2020, 07:44 | |
12.11.2020, 07:44 | |
Помогаю со студенческими работами здесь
5
Как правильно объявить двумерный динамический массив через malloc Как правильно выделить память под двумерный динамический массив Как создать динамический массив Как создать динамический массив? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |