0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
|
||||||
1 | ||||||
Переопределение размера массива указателей11.08.2014, 15:05. Показов 5753. Ответов 34
Метки нет (Все метки)
Доброе время суток. Столкнулся с неожиданно проблемой, не могу решить. Поиск по форуму ничего не дал.
Есть элементарный код:
0
|
11.08.2014, 15:05 | |
Ответы с готовыми решениями:
34
Задание размера и инициализация массива указателей в конструкторе Добавление нового указателя в конец массива указателей, удаление указанного элемента, добавление указателей Массив указателей на массив строк и сортировка массива указателей Переопределение массива |
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||
11.08.2014, 15:22 | 2 | |||||
0
|
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
|
|
11.08.2014, 15:40 [ТС] | 3 |
Но ведь b здесь это указатель на массивы указателей. А у меня b - массив указателей на данные типа int.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
11.08.2014, 16:03 | 4 | |||||
CheburatorUA, в Вашем случае смысла в динамическом выделении памяти нет (строка 11). Когда требуется выделить память по запросу пользователя обычно делают почти так как указал John Prick, только выделять память всё таки нужно под данные, а не под указатели.
0
|
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
|
|||||||||||
11.08.2014, 16:06 [ТС] | 5 | ||||||||||
Я сделал так как вы написали
И мне не нужна матрица или двумерный динамический массив. В матрице мы создаем массив указателей на массив указателей. А мне просто нужен массив указателей.
0
|
Комп_Оратор)
|
|
11.08.2014, 16:06 | 6 |
Сообщение было отмечено CheburatorUA как решение
Решение
Это указатель на указатель. Может указывать на один указатель, а может и на начало аж целого массива указателей.
Когда Вы пишете объявление автоматического массива: int a[n]; или int *b[n]; Вы просите компилятор выделить память в области объявления на стадии компиляции и значит n должен быть вычисляем на стадии компиляции (быть константным выражением). John Prick показал Вам, что выделение динамической памяти под тип или под указатель на тип, в принципе одинаковы. То есть, если нужно выделить память с размером времени выполнения, это единственный путь: new/malloc. Я думаю (экстрасенсорика) ТС знает как выделить под массив целых, но экспериментирует на предмет создания массива с динамически изменяемым размером. Отсюда и попытки навыделять под указатели, а потом... CheburatorUA, тут грибов нет. Смотрите std::vector.
1
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||
11.08.2014, 16:18 | 7 | |||||
Может быть вот так вот будет нагляднее:
0
|
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
|
||||||
11.08.2014, 23:20 [ТС] | 8 | |||||
IGPIGP, Да, вектором получилось, спасибо. Буквально самое начало про него прочитал и уже вкумекал как сделать. Вот как-то так:
0
|
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
|
||||||
20.08.2014, 21:58 | 10 | |||||
Спрошу тут, чтоб новую тему не создавать:
Написал класс для динамического массива.
P.S. Память для самих элементов (На которые указывают указатели из нашего массива) выделяется отдельно.
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||||||||||||
20.08.2014, 22:07 | 11 | |||||||||||||||
И, кстати, надо так (повсеместно):
А ещё, здесь уже звучал совет, чтобы не теряться в "звёздочках":
0
|
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
|
|
20.08.2014, 22:27 | 12 |
У меня один элемент создаётся даже если поменять N на любое другое число.
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|
20.08.2014, 22:51 | 13 |
Как ты определяешь, что создаётся только 1 элемент?
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|
20.08.2014, 22:58 | 14 |
Если new[], то и delete[]
WinRar007, как Вы определили, что элемент только один?
0
|
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
|
|
20.08.2014, 23:50 | 15 |
Как-как, через отладку!
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|
21.08.2014, 00:10 | 16 |
WinRar007, а что ты хочешь увидеть в отладке? Ты, по сути, создаёшь указатель, инициализируешь его адресом первого элемента массива указателей, созданного динамически, - это всё, что видит отладчик. Он не покажет тебе весь массив, как если бы ты написал int* array[100500], потому что он знает только про указатель и ничего не знает про то, чем он был инициализирован во время выполнения программы.
0
|
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
|
|
21.08.2014, 08:55 | 17 |
John Prick,
Ага, понятно, спасибо. Но тогда возникают вопросы: Во первых, как узнать количество? Во вторых, почему
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
||||||
21.08.2014, 10:29 | 18 | |||||
Ну ты же задавал количество элементов в []. Вот его и надо смотреть, по другому никак. Тем более, что ты же специально создаёшь класс-обёртку. Вот там и можешь сохранить это число:
Нужно смотреть, как ты обращаешься к элементам этого массива.
0
|
1 / 1 / 0
Регистрация: 08.04.2014
Сообщений: 80
|
|||||||||||
21.08.2014, 10:35 | 19 | ||||||||||
Пример:
0
|
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
|
|
21.08.2014, 10:55 | 20 |
И что это за числа i и i2? И что находится в этих элементах массива?
0
|
21.08.2014, 10:55 | |
21.08.2014, 10:55 | |
Помогаю со студенческими работами здесь
20
Переопределение массива Переопределение размера OFNHookProc переопределение размера буфера названия файла Переопределение размера массива Дан целочисленный массив A размера N. Сформировать два новых целочисленных массива B и C одинакового размера, записав в Позднее переопределение размерности массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |