Я пытаюсь загрузить множество примитивов с помощью Direct3D 9, поэтому мне нужно передать большой массив структуры в виртуальный буфер. Но если я делаю это с помощью malloc()
, моя функция sizeof()
возвращает неправильное значение (всегда 4). И если я обычно выделяю стек памяти (array[number]
), стек может переполняться из-за количества элементов. Есть ли альтернатива этому? Как выделить стек памяти, который может загружать столько данных?
PS Я не собираюсь рисовать их на экране, но мне все еще нужна их информация о вершинах.
При использовании с указателем оператор sizeof
возвращает размер указателя, а не то, на что указывает.
Когда вы распределяете память динамически (в C++ используйте new
вместо malloc
), вам нужно отслеживать количество записей самостоятельно. Или еще лучше, используйте, например, std::vector
.
Если вы вызвали malloc, вы назвали его размером с объем пространства, который вы хотели. Если вы хотите позже узнать, насколько велико распределение, вам нужно сохранить эту информацию вокруг себя.
Поскольку вы используете C++, вы можете использовать. Если вы вызываете malloc, вы вызывали его с размером пространства, которое вы хотели. Если вы хотите позже узнать, насколько велико распределение, вам нужно сохранить эту информацию вокруг себя.
Если у вас слишком много проблем, поскольку вы используете C++, вы можете использовать <vector>
или аналогичный, который будет отслеживать собственный размер. вектор или аналогичный, который будет отслеживать свой собственный размер.
Да с malloc()
а затем с помощью sizeof()
даст вам 4. Это размер указателя.
Если вам просто интересно, как заполнить ваши значения в ptr, обратитесь к следующему коду:
int numOfItems = 10; int* pArr = (malloc(sizeof(int)*numOfItems); for (int i=0;i<numOfItems;i++) pArr[i] = i+1;
Оптимальным вариантом может быть распределение std :: vector динамически и использование умного указателя.
std::shared_ptr< std::vector< your data type> > vertices( new std::vector( number );
Теперь вы не переполняете стек, все соответствующее ведение домашнего хозяйства выполняется с помощью std :: vector и std :: shared_ptr, и, самое главное, память будет удалена.
std::vector
или следите за размером самостоятельно.