|
4 / 4 / 5
Регистрация: 28.04.2010
Сообщений: 162
|
|||||||||||
Отличие операции с выделением памяти и без09.08.2011, 16:05. Показов 6558. Ответов 60
Метки нет (Все метки)
Всем привет!
Не сочтите за глупость, но возник интересный вопрос, над которым давно думаю, а овтета нигде не находил Вот нужно, допустим, создать массив из n элементов Сделать это можно 2-мя способами
и
В чём принципиальная разница? Я понимаю, в Qt сразу написано - объекты QObject необходимо создавать с выделением памяти, чтобы не было проблем Понятно, так и делаем. А тут как правильней?
0
|
|||||||||||
| 09.08.2011, 16:05 | |
|
Ответы с готовыми решениями:
60
Ошибка с выделением памяти Конструктор с выделением памяти |
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|||||||||||
| 09.08.2011, 17:16 | |||||||||||
Сообщение было отмечено как решение
Решение
Ну и в конце ещё
3
|
|||||||||||
|
Заблокирован
|
|
| 09.08.2011, 17:19 | |
|
0
|
|
|
|
|||
| 09.08.2011, 17:21 | |||
|
Добавлено через 1 минуту
0
|
|||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 09.08.2011, 17:25 | |
|
Сыроежка, читайте стандарт...
В С++ НЕТ многомерных массивов. Только одномерные. Именно поэтому при объявлении массива с многими размерностями, разрешается ТОЛЬКО ОДНУ - самую старшую - не указывать...
1
|
|
|
Заблокирован
|
||
| 09.08.2011, 17:25 | ||
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
||
| 09.08.2011, 17:25 | ||
Хотя рассматривать ли это как двухмерный массив или как массив массивов — это какой-то схоластический спор получится. Я в таком не участвую ![]() Хотя здесь, очевидно, получился полудинамический двухмерный массив, так как второе измерение константного размера.
1
|
||
|
Заблокирован
|
||
| 09.08.2011, 17:27 | ||
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 09.08.2011, 17:29 | ||
|
У вас размерности - константные. У вас массив из М элементов, каждый элемент которого - массив из N элементов...
0
|
||
|
Заблокирован
|
||
| 09.08.2011, 17:29 | ||
![]() В противном случае не могли бы вы мне сказать, какой это тип char[ m ][ n ]?! И где в этом выражении знак '*', который обязателен при задании типов указателей?! Куда звездочка-то пропала?! Я щас заплачу!
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 09.08.2011, 17:31 | |
|
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 09.08.2011, 17:34 | ||
|
Народ! Двумерный массив имеет РАВНОПРАВНЫЕ измерения. То есть в двумерном массиве я могу одинаковым образом работать и со строкой и со столбцом! Ну-ка попробуйте такое в С++.
Нет двумерных массивов в С++. Есть массив массивов. А это - не то же самое, что двумерный массив. Добавлено через 1 минуту В том-то и фокус... ![]() Для массива n размерностей n-1 размерность должна быть константной...
0
|
||
| 09.08.2011, 17:34 | |
|
Не по теме: Я ещё раз обращаю внимание, что отказываюсь участвовать здесь в схоластических спорах. Место им в холиварах.
2
|
|
|
Заблокирован
|
||||||||||||
| 09.08.2011, 17:48 | ||||||||||||
|
Я вас уже спросил, что это за тип в выражении new
Как раз в выражении char ( *p )[ m ] = new char[ n ][ m ]; слева задан указатель (звездочку видите в определе6нии?! ), а справа задан массив. Какой массив? Двумерный! Если вы еще не понимаете, то я это выражение могу упростить
А ваши спекуляции по поводу того, что массив в памяти располагается линейно (а иначе его и расположить по другому нельзя, так как память линейна), никакого отношения к типу массив не имеют! Более того, если бы вы внимательно читали станлдарт, то в разделе, посвященном описанию ограничений языка, нашли бы ограничение на количество размерностей массива, которые должен гарантировать компилятор. ![]() Добавлено через 8 минут Вы говорили, что книги по С/С++ писали? Теперь я знаю, какие книги ни в коем случае рекомендовать нельзя!
0
|
||||||||||||
| 09.08.2011, 17:52 | |
|
1
|
|
|
Заблокирован
|
||
| 09.08.2011, 18:03 | ||
|
Я еще хотел бы добавить. Когда мы имеем выражение вида
char ( *p )[ m ] = new char[ n ][ m ]; то значением *p является массив меньшей размерности! То есть если вы зададите конструкцию большей размерности, то разыменованный указатель будет представлять собой тип массива размерностью на единицу меньше, чем исходный тип массива, на который указывает указатель. То есть значением разыменованного указателя всегда является массив, если исходная размерность его была не меньше 2. Если исходный массив имел размерность 16, то после разыменования указателя тип выражения *p будет массив размерностью 15. Добавлено через 4 минуты
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||
| 09.08.2011, 19:05 | ||||||
|
Сыроежка, ссылки на пункты стандарта - в студию! Особенно там, где написано об ограничении количества размерностей...
Компилятор в студии не возникает.
0
|
||||||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 09.08.2011, 19:38 | ||
|
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 09.08.2011, 19:43 | ||
|
Сыроежка, ошибочка вышла.
![]() Добавлено через 1 минуту Сыроежка, пока ссылки из стандарта по своим вопросам не покпажешь - не о чем разговаривать. Напоминаю, что про массивы написано в пункте 8.3.4 Стандарта...
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 09.08.2011, 19:47 | ||
|
Я не могу понять, как происходит для этого выделение памяти. Но работает! Уже проверил. Объясните плиз.)
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|||||||
| 09.08.2011, 19:56 | |||||||
|
Вот new char[n][m] и выделяет память под n элементов с типом char[m]. А сам указатель имеет тип
0
|
|||||||
| 09.08.2011, 19:56 | |
|
Проблема с выделением памяти Проблема с выделением памяти Ошибка с выделением памяти Проблемы с выделением памяти Ошибка в коде с выделением памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|