Двойной массив
От: Nik  
Дата: 31.08.01 13:32
Оценка:
У меня выделяется двойной массив:
char** array;
Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?
Re: Двойной массив
От: Sasparella США  
Дата: 31.08.01 13:37
Оценка:
Здравствуйте Nik, вы писали:

Nik>У меня выделяется двойной массив:

Nik>char** array;
Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?

DWORD dwSize = sizeof(*array);
DWORD dwTotalSize = dwSize;
for (int i = 0; i< dwSize; i++)
dwTotalSize += sizeof(array[i]);

Чтото вроде этого.....
Re[2]: Двойной массив
От: ZORK Россия www.zorkaltsev.com
Дата: 31.08.01 15:14
Оценка:
Здравствуйте Sasparella, вы писали:

S>Здравствуйте Nik, вы писали:


Nik>>У меня выделяется двойной массив:

Nik>>char** array;
Nik>>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?

S>DWORD dwSize = sizeof(*array);

S>DWORD dwTotalSize = dwSize;
S>for (int i = 0; i< dwSize; i++)
S> dwTotalSize += sizeof(array[i]);

S>Чтото вроде этого.....


! — так не сработает. sizeof() определяется во время компиляции, так что sizeof(*array) и sizeof(array[i]), однозначно вернут 4 для 32-bit системы

Что-бы узнать размер выделенной понями, надо знать что использовалось в операторе new, то есть если например там используется GlobalAlloc, то размер можно узнать при помощи GlobalSize, но потенциально тут могут быть подводные камни — размер блока памяти может быть выравнен, и быть больше размера массива. Так что для общего C++ случая, проще завести отдельные переменные, в которой хранить размерности массива. Или просто использовать STL вектор — там размер можно узнать всегда
Думать надо ...головой :)
Re: Двойной массив
От: Андрей Тарасевич Беларусь  
Дата: 31.08.01 16:39
Оценка:
Здравствуйте Nik, вы писали:

Nik>У меня выделяется двойной массив:

Nik>char** array;
Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?

Запоминай размеры в переменных. Больше — никак.

Bets regards,
Андрей.
Best regards,
Андрей Тарасевич
Re[2]: Двойной массив
От: SlavaS  
Дата: 10.09.01 00:43
Оценка:
Здравствуйте Андрей Тарасевич, вы писали:

АТ>Запоминай размеры в переменных. Больше — никак.


А еще можно как в строках — в конце массива элемент с предопределенным значением, но тогда надо писать свои функции типа strlen.

Best regards.
Re: Двойной массив
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.09.01 20:25
Оценка:
Здравствуйте Nik, вы писали:

Nik>У меня выделяется двойной массив:

Nik>char** array;
Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?

Самое простое исползовать хелпер-классы std::vector или наш CascArray (если пишеш на ATL). При этом ты получишь не только определение длинны в рантайме (без дополнительного напряжения), но и кучу других возможностей (автоматическое управление выделением памяти, проверки выхода за границы массива в дебаге...).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.