이 기능은 완벽하게 잘 작동 정도 컴파일러/디버거 나에게 여기에서이 코드로 인해 액세스 위반이 발생하는 이유는 무엇입니까?
void GUIManager::init(ToScreen* tS)
{
toScreen = tS;
loadFonts();
GUI_Surface = SDL_SetVideoMode(toScreen->width, toScreen->height, 32, SDL_SWSURFACE);
components.push_back(&PlainText("Hello, World!", font, -20, -40));
}
를 알려줍니다, 첫 번째 함수 호출 액세스 위반 오류가 발생합니다. 디버거에 문제가 표시되지 않습니다. 프로그램이 여기서 중단되므로 구성 요소 [0]을 디버깅 할 수있는 기회가 없습니다. 이 필요한 경우
void GUIManager::draw()
{
// This line here is the problem
components[0].draw(GUI_Surface);
// This line here is the problem
SDL_BlitSurface(GUI_Surface, NULL, toScreen->Screen_Surface, NULL);
}
, 이것은 내 '구성 요소'
boost::ptr_vector<GUIComponent> components;
그냥 다른 코드가 필요한 경우 알려 주시기 바랍니다. components
만큼 존재합니다 당신은 동적 객체를 밀어해야
components.push_back(&PlainText("Hello, World!", font, -20, -40));
: 대신 그냥이 줄 끝의 수명을 종료 일시적으로 포인터를 밀어 아마도 그 평문 또는 GUIComponent
의
그냥 다 '구성 요소'의 요소 수가 드워싱 전에 0이 아닙니다. –
구성 요소 [0]. 위치 .x + = 1; 괜찮아요. – Kelpsie
로컬 변수의 주소를 구성 요소로 푸시합니다. 이 메모리가 해제되면 나중에 액세스 할 때 액세스 위반이 발생할 수 있습니다. – combinatorial