목표 C ++ 메모리 문제
-
18-09-2019 - |
문제
나는 기억력이있다.
C ++ 라이브러리 (Eyescale에서 이퀄라이저)를 가지고 있으며 Traversal Visitor 패턴을 사용하여 클래스에 새로운 기능을 추가 할 수 있습니다.
마침내 어떻게 작동하는지 알아 냈고, 객체 중 하나에서 속성을 반환하는 방문객이 있습니다. (내가 어떻게 할당되었는지 모르기 때문에).
그래서.
내 작은 코드는 다음을 수행합니다.
VisitorResult AGLContextVisitor::visit( Channel* channel )
{
// Search through Nodes, Pipes until we get to the right window.
// Add some code to make sure we find the right one?
// Not executing the following code as C++ in gdb?
eq::Window* w = channel->getWindow();
OSWindow* osw = w->getOSWindow();
AGLWindow* aw = (AGLWindow *)osw;
AGLContext agl_ctx = aw->getAGLContext();
this->setContext(agl_ctx);
return TRAVERSE_PRUNE;
}
여기 문제가 있습니다.
eq::Window* w = channel->getWindow();
(gdb) print w
0x0
그러나 내가 이것을한다면 :
(gdb) set objc-non-blocking-mode off
(gdb) print w=channel->getWindow()
0x300effb9
// 정직한 메모리 위치로 Xcode의 디버거 창에서 확인 된대로 W를 설정합니다.
OSW에 대해서도 마찬가지입니다.
나는 그것을 얻지 못한다. 왜 (GDB)에서 무언가가 작동하지만 코드에서는 작동하지 않습니까?
파일은 완전히 CPP 파일이지만 차단을 끄야하므로 OBJC ++에서 실행중인 것 같습니다.
돕다!? C ++ 또는 OBJ-C를 사용하여 메모리 관리 기본 사항이없는 것 같습니다.
편집하다
채널-> getwindow ()는 다음을 수행해야합니다.
/** @return the parent window. @version 1.0 */
Window* getWindow() { return _window; }
C ++에서만 실행하면 코드가 잘 실행됩니다.
편집하다
아니요 ... 플러그인으로 실행하는 데 지쳤으므로 간단한 독립형 프로그램을 만들려고했습니다. 디버그가 지저분합니다.
그리고 아니요, C ++ 프로그램에서도 실행되지 않습니다. 그래서 나는 내가 틀린 일에 대해 정말로 상실하고 있습니다.
감사,
- 스티븐 푸르 라니
해결책
나는 이것을 대답하고 닫아야한다고 생각합니다.
내가 사용하고 있던 방법은 완전히 스레드-미사였다. 나는 실, 탄소/코코아, C ++/OBJC를 가로 질러 전화했다.
말할 것도없이, 그렇게하지 마십시오! 나는 어려운 방법을 배웠다.
-스테페