Я пытаюсь выделить массив указателей на структуру, но с моим кодом что-то не так.Не удалось выделить массив указателей на struct
Это моя структура:
struct Brick {
GameObject2D* handle_;
};
Brick** bricks_;
И это, как я пытаюсь выделить память для него:
int bricks_amount_ = 10;
bricks_ = (Brick**)malloc(sizeof(Brick*) * bricks_amount_);
Катастрофа программа. Я сделать Devenv на нем отладить, где проблема и аварии на этой линии:
for (unsigned short int i = 0; i < bricks_amount_; i++){
bricks_[i]->handle_ = new GameObject2D(); <---------- CRASH!
}
Любые предложения?
PS: Извините за мой английский: P
================================ =========================================
[РЕШЕНИЕ]
Наконец я решил использовать зЬй :: вектор вместо сырых указателей:
bricks_.resize(bricks_amount_);
, но я пытался сделать таНос другой путь, и это тоже работает:
bricks_ = (struct Brick*)malloc(sizeof(struct Brick) * bricks_amount_);
или это:
bricks_ = new Brick[bricks_amount_];
Спасибо людям, которые хотят, чтобы помочь!
Ясно 'bricks_ [i] -> handle_' обращается к неинициализированной памяти. 'bricks_ [i]' не присвоено значение. –
Также не смешивайте 'malloc()' и 'new()', используйте 'new []' для выделения массивов. –
Дополнительные пояснения к комментарию @KerrekSB '(+1): malloc создает полезный массив, но содержимое неинициализировано, что означает, что ваши указатели на Brick * находятся на полностью случайном значении, возможно, нулевом, возможно, указывающем за пределами звезд. Что вы пропустили: 'game_state_.bricks_ [i] = new Brick();', e. г. прямо перед вашим сбоем, чтобы инициализировать каждый указатель внутри массива. – Aconcagua