![]() |
|
Модераторы: bsa |
![]()
|
|
| Trurl |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Подскажите, пожалуйста, в чём ошибка?
компилируется без проблем
возникает ошибка: test.cpp(15) : error C2440: 'initializing' : cannot convert from 'int (*)[10]' to 'int *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast как можно тогда создать двумерный массив в динамической памяти? С уважением. |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Думаю примерно так
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Trurl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Спасибо, не уверен, что мне это подойдёт.
Мне нужно сделать нечто следующее, но компилятор это не пропускает, хотя в одномерном случае всё ок.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Так и чего? Все равно разом нельзя так объявлять двумерный массив. Компилятор же не знает длину одной строки, как он сможет обратиться. Не тут только массив указателей. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Добавлено через 1 минуту и 7 секунд С++ чуствителен к регистру Добавлено через 2 минуты и 17 секунд
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
У варианта
Только одно измерение динамическое. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Я не зря наверное процитировал то, что N определено define'ом и представляет из себя константу -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
В таком случае всё, что ты написал дальше, абсолютно лишнее, так как в этом случае динамическая квадратная матрица не нужна. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
На вашем месте я не был бы настолько категоричен. 1. N * N * sizeof(int) может оказаться в районе нескольких гигабайт. 2. Может оказаться необходимым продлить время жизни такого массива дальше чем конец текущего блока. Если подумать, то, думаю, можно будет придумать ещё несколько примеров. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
А почему не в районе нескольких сотен тысяч гигабайт? archimed7592, ты же прекрасно понял о чём я сказал. Или, всё-таки, не понял? -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Может быть и в этом районе. Суть в том, что такие объёмы выделять на стеке не рационально. Если честно, не особо понимаю. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
как раз таки рационально, в смысле в разы быстрее другое дело, что таких больших стеков не бывает Добавлено через 4 минуты и 21 секунду как вариант можно использовать
Это сообщение отредактировал(а) MAKCim - 29.12.2007, 12:38 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Замечу, что я ни разу не упомянул о скорости Об том и речь. Ну и время жизни для таких огромных объектов нет смысла делать автоматическим. Это не совсем стек ;). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Насколько я знаю такой массив создаться точно также как обычная глобальная переменная, то только ее имя будет локализовано, потому для гигабайта не катит. В опциях проекта можно указать максимальный размер стека (под винду) Опять же если смотреть под винду то скорость создания будет примерно такой же, как и в стеке, потому что винда не дурная чтобы гиг стека без нужды с оперативе держать. Хотя пожалуй archimed7592 прав. Просто тут есть путаница, под динамическим массивом можно понимать массив динамической длинны или выделенный в куче -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Не совсем так. Есть три вида storage duration: automatic, dynamic и static. В общем случае для каждого из видов предусмотрена отдельная "область" памяти. Для автоматических объектов это стек, для динамических - куча, а для статических - точно сказать не могу, но, AFAICS это просто область в сегменте данных, выделяемая в момент старта программы.
Сколько раз указывал - винда разом не выделяла огромный объём под стек -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
В том то и дело если она начнет его наращивать, то быстрее не будет. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
Замечу, что я ни разу не упомянул о стеке Добавлено через 2 минуты и 5 секунд очень даже катит причем это будет самый быстрый способ выделения памяти + данные будут располагаться в BSS секции, что не увеличивает размер выходного файла -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Че это за секция такая? Т.е. в экзешнике не резерируется место под статик переменные? Они что создаются на этапе инициализации? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Alexeis, думаю, только статические константы встроенных типов могут располагаться в сегменте кода.
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 2 Всего: 207 |
неинициализированные глобальные (статические и не статические) и локальные статические данные располагаются в BSS секции я не знаком с форматом файлов PE однако могу сказать про реализацию BSS в формате ELF там есть такое понятие как таблица дескрипторов програмных сегментов каждый програмный сегмент имеет определенный тип особое положение занимают сегменты с типом PT_LOAD, т. е загружаемые програмные сегменты по ним осуществляется отображение образа программы (библиотеки) на адресное пространство процесса каждый дескриптор имеет два очень важных компонента: FileSiz и MemSiz разность значений MemSiz - FileSiz дает размер BSS секции образа программы (библиотеки) т. е, например, если где-то в коде определен неинициализированный массив размером в 1ГБ, то MemSiz = FileSiz + 1024 * 1024 * 1024 при этом значение FileSiz равно общему размеру всех инициализированных данных (явно определенных в коде или неявно создаваемых компилятором / компоновщиком) при динамической компоновке (загрузчиком ядра или пользовательского уровня (ld.so)) отображается FileSiz-часть образа программы (библиотеки) и выделяется MemSiz - FileSiz байт для BSS Это сообщение отредактировал(а) MAKCim - 29.12.2007, 19:06 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 6 Всего: 93 |
Да, вообще говоря, на такие переменные и так не выделяется...
Ну, тебе виднее -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |