2011-10-03 47 views
1

我正在開發一個應用程序來獲取Mac OS X 10.5或更高版本中安裝的軟件列表。該程序是使用objective-C++(c,C++,obj-c)創建的。每次運行程序時,都會崩潰。該程序創建目標c + +崩潰

int main (int argc, const char * argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
    //My part of coding 
    [pool drain]; // This is the crash prone place 
    return 0; 
} 

在這裏我提供項目設置的詳細信息:

文件擴展:.mm

編譯爲:客觀C++

Objc GC:不支持

庫使用:libxml2.2.dylib,Foundation Framework

目標platfom:x86_x64

發展:Mac OS X的10.6.8時,Xcode 3.2.6

應用類型:控制檯應用程序

我不知道任何其他選項需要設置編譯目標C++。任何有關這方面的幫助將不勝感激。

是的。我已經設置基地的SDK爲10.5

這裏是日誌跟蹤:

調試器已退出,狀態0 [會議於2011-10-03 22時29分25秒0530開始。] GNU gdb 6.3.50-20050815(Apple版本gdb-1515)(星期一 Jan 15 08:33:48 UTC 2011)版權2004自由軟件基金會, Inc. GDB是免費軟件,涵蓋GNU通用公共許可證, 歡迎您在 的特定條件下對其進行更改和/或分發。輸入「show copying」查看條件。對於GDB, 絕對沒有保證。請輸入「顯示保修」以瞭解詳情。 此GDB被配置爲「x86_64-apple-darwin」.tty/dev/ttys003 將程序加載到調試器中...程序已加載。運行[切換到 進程2973]正在運行...編程接收信號:「EXC_BAD_ACCESS」。 (gdb)

我還有一個問題。在C++類析構函數中釋放obj-c對象是否有效? 這樣

MyClass的:: myclasss(){myobjcinterface * myobjc = [[myobjcinterface 的alloc] INIT]; }

myclass ::〜myclass(){[myobjc release];} }

+0

您需要將您的基礎SDK設置爲10.5。 –

+0

你可以發佈你使用代碼收到的崩潰消息,它可以更容易地追蹤。 –

回答

1

我還有一個問題。在C++類析構函數中釋放obj-c對象是否有效?像這樣

是的。

至於你EXC_BAD_ACCESS,如果它hapening上自動釋放池的排水,它幾乎可以肯定,你已經自動釋放的東西發佈,所以池試圖釋放一個懸擺指針。

嘗試設置環境變量NSZombieEnabledYES,然後運行您的程序。它應該給你關於過度釋放的診斷。