void Game::Init() {
m_Engine = new Engine();
delete m_Engine; // 뻑남
m_Engine = nullptr;
}
아니 동적할당 하고 메모리 해제하는데 delete m_Engine에서 계속 에러남.
에러코드: Access violation reading location
그래서 계속 디버깅하다가 동적할당 하자마자 메모리 해제하면 어떻게 되나 싶어서 위에처럼 해봤는데 저기서도 delete m_Engine에서 같은 에러 발생함.
Access violation reading location이 할당받지 않은 혹은 할당됐다가 해제된 메모리에 접근할때 발생하는 에러 아님?
참고로 Engine 생성자에서 실행되는거 아무것도 없음.
프로그램 흐름.
1. 아래처럼 동적할당 하고 game->Init() 실행함.
Game* game = new Game();
game->Init();
2. Game::Init() 내부. 여기서 동적할당하고 ㅅㅂ 바로 뻑나잖아... 어떡하라는거지
void Game::Init() {
m_Engine = new Engine();
delete m_Engine;
m_Engine = nullptr;
}
설마 동적할당 자체가 안된건가 싶어서 테스트도 해봄.
void Game::Init() {
if (m_Engine == nullptr) {
std::cout << "m_Engine is nullptr\n";
}
m_Engine = new Engine();
if (m_Engine == nullptr) {
std::cout << "m_Engine is nullptr\n";
}
else {
std::cout << "m_Engine is not nullptr\n";
}
delete m_Engine;
m_Engine = nullptr;
}
결과
m_Engine is nullptr
(동적할당)
m_Engine is not nullptr
동적할당도 잘 됨...
진짜 도움이 간절하게 필요하다...
Z
메모리 어디서 잘못 write한듯
동적할당 하자마자 바로 해제해버리는데 잘못 write할 곳이 있나..? 중간 과정이 있다가 그랬으면 몰라도 바로 해제해버리는데... 내가 모르고 있는거 있으면 제발 좀 알려주셈 ㅠㅠ 오늘 저거 잡고싶음,....
컴파일러는 잘못이없다
내 cpp 잘 모른다만 Engine 내부를 안보여주고 그리 물어보면 해결하기 힘들지않을까
정말 아무것도 구현 안돼있음. 생성자 소멸자만 있고, 정의는 아무것도 안적음
m_Engine의 생성자 소멸자 코드를 가져와라
아무것도 구현 안했음....
갑자기 의심드는곳 찾았는데 혹시 이게 맞나..? Engine이 정적 라이브러리인데 내가 아까전에 컴파일하니까 Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: __cdecl Engine::~Engine(void)" (??1Engine@@QEAA@XZ) referenced in function "public: void * __cdecl Engine::`scalar deleting destructor'(unsigned int)" (??_GEngine@@QEAAPEAXI@Z) 이 에러 떠가지고 이것저것 하다가 소멸자에 virtual 박아버렸거든. 상속 받은것도 없고
상속 한 것도 없는데... 혹시 이거때문에 문제가 생긴걸까? 근데 virtual이 없으면 컴파일조차 안됨....
그렇지않을까
해결했음
여러분 해결했습니다~ 시발 왜 해결됐는지는 모르겠는데, 솔루션 빌드하고 디버깅하니까 잘 실행 되네요...
혹시 정적 라이브러리 수정된거 있으면 빌드하고 디버깅 해야함???? 계속 빌드 안하고 디버거 실행했는데...
그런걸로앎 아무튼 ㅊㅋ
감사링 ㅋㅋ