У меня вопрос, который довольно общий, но я надеюсь, что кто-то сможет хотя бы указать мне в правильном направлении.C++ Visual Studio Release build unused crash
Я создал свой проект, я строил его только в режиме отладки с флагом/MDd. Но у него начались проблемы с производительностью, поэтому я хотел попробовать его в режиме Release, чтобы посмотреть, как это происходит. Проблема заключается в том, что когда я использую флаг/MD или/MT и режим Release, мое приложение мгновенно вылетает. Итак, я попытался выяснить, почему. Он отлично работает в Debug. Я пробовал некоторые изменения кода, но ничего не помогло. Поэтому я решил сделать свое приложение только началом и прокомментировать остальную часть моего кода. Но он все еще падал. Даже когда мой код не использовался. Это не сбой только, когда я полностью удалил неиспользуемые части кода.
Я думаю, что это что-то с переменной inicialization/declaration, но я не совсем уверен, что мне следует искать.
Может ли кто-нибудь предложить мне, что может привести к сбою приложения, даже если это просто объявление/inicialization и даже не используется в RunTime?
Надеюсь, вы сможете как-то понять, в чем моя проблема.
Спасибо за любые предложения!
EDIT: код, который выходит из строя, когда неиспользуемый код находится в проекте, но не сбой при удалении неиспользуемого кода.
#include "core/oxygine.h"
#include "Stage.h"
#include "DebugActor.h"
//#include "Galatex.h"
using namespace oxygine;
//called each frame
int mainloop()
{
//galatex_update();
//update our stage
//update all actors. Actor::update would be called also for all children
getStage()->update();
if (core::beginRendering())
{
Color clearColor(32, 32, 32, 255);
Rect viewport(Point(0, 0), core::getDisplaySize());
//render all actors. Actor::render would be called also for all children
getStage()->render(clearColor, viewport);
core::swapDisplayBuffers();
}
//update internal components
//all input events would be passed to Stage::instance.handleEvent
//if done is true then User requests quit from app.
bool done = core::update();
return done ? 1 : 0;
}
//it is application entry point
void run()
{
ObjectBase::__startTracingLeaks();
//initialize Oxygine's internal stuff
core::init_desc desc;
#if OXYGINE_SDL || OXYGINE_EMSCRIPTEN
//we could setup initial window size on SDL builds
desc.w = 1800;
desc.h = 1000;
//marmalade settings could be changed from emulator's menu
#endif
//galatex_preinit();
core::init(&desc);
//create Stage. Stage is a root node
Stage::instance = new Stage(true);
Point size = core::getDisplaySize();
getStage()->setSize(size);
//DebugActor is a helper actor node. It shows FPS, memory usage and other useful stuff
DebugActor::show();
//initialize this example stuff. see example.cpp
//galatex_init();
#ifdef EMSCRIPTEN
/*
if you build for Emscripten mainloop would be called automatically outside.
see emscripten_set_main_loop below
*/
return;
#endif
//here is main game loop
while (1)
{
int done = mainloop();
if (done)
break;
}
//user wants to leave application...
//lets dump all created objects into log
//all created and not freed resources would be displayed
ObjectBase::dumpCreatedObjects();
//lets cleanup everything right now and call ObjectBase::dumpObjects() again
//we need to free all allocated resources and delete all created actors
//all actors/sprites are smart pointer objects and actually you don't need it remove them by hands
//but now we want delete it by hands
//check example.cpp
//galatex_destroy();
//renderer.cleanup();
/**releases all internal components and Stage*/
core::release();
//dump list should be empty now
//we deleted everything and could be sure that there aren't any memory leaks
ObjectBase::dumpCreatedObjects();
ObjectBase::__stopTracingLeaks();
//end
}
#ifdef __S3E__
int main(int argc, char* argv[])
{
run();
return 0;
}
#endif
#ifdef OXYGINE_SDL
#include "SDL_main.h"
extern "C"
{
int main(int argc, char* argv[])
{
run();
return 0;
}
};
#endif
#ifdef EMSCRIPTEN
#include <emscripten.h>
void one() { mainloop(); }
int main(int argc, char* argv[])
{
run();
emscripten_set_main_loop(one, 0, 0);
return 0;
}
#endif
Вам необходимо опубликовать код (вы утверждаете, что у вас есть минимальный пример, который выходит из строя). – SergeyA
Если вы создаете свой проект из шаблона в VS, тогда вам не нужно беспокоиться обо всех этих коммутаторах. Вы выбираете Debug или Release. Я предлагаю вам создать новый проект и скопировать весь код на него. – marcinj
Я добавил код, который сбой с неиспользуемым кодом, но это нормально, когда я удаляю неиспользуемый код полностью из проекта. Но я не думаю, что это поможет с anyhing. –