Недавно я заметил, что мой Двигатель абсолютно неоптимизирован, поэтому я решил сделать небольшую очистку. После реализации некоторых алгоритмов отбраковки я открываю диспетчер задач Windows, чтобы узнать, сколько моего приложения использует память. В результате моих коротких исследований о «новых» и «удаленных» операторах я попытался использовать их для более эффективного использования памяти. Например:Почему удаление оператора приводит к отказу отладки в режиме отладки?
void DrawSkybox()
{
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
D3DXVECTOR3* Scal = new D3DXVECTOR3(1.5f, 1.5f, 1.5f);
D3DXVECTOR3* Rot = new D3DXVECTOR3(0, 0, 0);
obj_Skybox->Transform(&vec3_camera_viewPos, Scal, Rot);
DrawObject(p_Device, obj_Skybox, NULL, NULL, NULL, false);
p_Device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
delete Scal;
delete Rot;
}
В первый раз, когда я компиляции и запуска Отладочная версия двигателя я получил ошибку: «Debug Assertion Failed». Затем я скомпилировал и выполнил мой движок в качестве выпуска - все в порядке. Так в чем проблема?
Почему бы вам просто не создать эти экземпляры в стеке, например 'D3DXVECTOR3 Scal (1.5f, 1.5f, 1.5f);'? Я не вижу необходимости использовать 'new' /' delete'here вообще. ' –
Возможно, потому, что вы делаете что-то плохое с памятью, например, записываете за пределы или что-то еще, что, вероятно, приводит к [неопределенному поведению] (http : //en.wikipedia.org/wiki/Undefined_behavior)? –
Если вы уже переформатируете свой код на C++, почему бы не переключиться на использование современного управления памятью стиля RAII? Вы будете удивлены, сколько проблем просто исчезнет *. – 5gon12eder