У меня выделяется двойной массив:
char** array;
Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?
Здравствуйте Nik, вы писали:
Nik>У меня выделяется двойной массив: Nik>char** array; Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?
DWORD dwSize = sizeof(*array);
DWORD dwTotalSize = dwSize;
for (int i = 0; i< dwSize; i++)
dwTotalSize += sizeof(array[i]);
Здравствуйте 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 вектор — там размер можно узнать всегда
Здравствуйте Nik, вы писали:
Nik>У меня выделяется двойной массив: Nik>char** array; Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?
Здравствуйте Nik, вы писали:
Nik>У меня выделяется двойной массив: Nik>char** array; Nik>Затем для него выделяется какое-то количество памяти. Вопрос: как можно узнать его размер уже после выделения?
Самое простое исползовать хелпер-классы std::vector или наш CascArray (если пишеш на ATL). При этом ты получишь не только определение длинны в рантайме (без дополнительного напряжения), но и кучу других возможностей (автоматическое управление выделением памяти, проверки выхода за границы массива в дебаге...).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.