| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как узнать текущий размер массива? |
| Автор: mostly 1.6.2006, 21:01 | ||
Или я не правильно выделяю память под массив d ? |
| Автор: bel_nikita 1.6.2006, 21:14 | ||
| pc - строится на хипе, а d[1] и dd[50] на стэке Для стэкового массива:
Для хипа - сойздай переменнуб и храни текущие кол-во элементов. |
| Автор: mostly 1.6.2006, 21:26 | ||
Хочу создать массив и при необходимости увеличить его. И как узнать его текущий размер? А это был просто пример на котором я пытался это сделать. |
| Автор: bel_nikita 1.6.2006, 21:30 |
| mostly, для чего нужно? для курсовой какой? если для себя, то бери готовое std::vector и не парься |
| Автор: Daevaorn 1.6.2006, 21:41 | ||||||
Тебе нужно просто кешировать текущий размер массива в отдельной переменной. Если ты хочешь изменить размер массива, то самый простой способ примерно такой:
Будет работать для простых типов(int, float и т.д.) |
| Автор: Xenon 1.6.2006, 22:08 |
| Ну как и говорили выше делай sizeof(arr)/sizeof(arr[0]) или, я так понимаю, sizeof(arr)/sizeof(типа массива)? |
| Автор: mostly 1.6.2006, 22:19 | ||
Нет, я просто С++ изучаю. Вектор я знаю, но хотелось бы знать как сделать динамический массив в С++ (как в С делают с использованием malloc). |
| Автор: bsa 1.6.2006, 22:41 | ||
На C++ делают через вектор или через свою реализацию вектора (только зачем?). Если тебе хочется также, как и на С, но через new/delete, то замени malloc на new и free на delete[]. Только это глупо, имхо. Да и в C++ нет аналога (мне не известен, по крайней мере) realloc... Используй вектор или list (если не нужен произвольный доступ к элементам). |
| Автор: mostly 2.6.2006, 01:58 |
| Всем спасибо - разобрался. |
| Автор: UnrealMan 3.6.2006, 11:31 |
| Иногда можно юзать GlobalAlloc / GlobalReAlloc / GlobalFree / GlobalSize |
| Автор: bsa 3.6.2006, 21:11 | ||
Речь идет о Windows?!? На сколько я знаю, в стандарт C/C++ не входят данных функции. |
| Автор: UnrealMan 3.6.2006, 22:02 |
Естес-но :-) Можно ещё использовать AllocMemory / ReallocMemory / FreeMemory / MemorySize. Правда для этого библиотека bhsupp.dll понадобится. При компиляции в VC6.0 замечал, что при использовании и того и другого имеет место меньший по сравнению с malloc / new расход памяти при выделении небольших объёмов (несколько байт). К тому же GlobalSize и MemorySize позволяют узнать размер выделенной памяти (правда он не всегда совпадает с размером, указанным при выделении). Разумеется, есть и более продвинутые способы, но они и не такие простые в применении. |