2013-01-13 45 views
3

我開發的音頻插件適用於Windows和Mac(VST和AU),和我碰到的,只有在插件在64位主機DAW打開(在我的情況收割時出現問題)在OSX 10.8中。爲什麼在64位應用程序中運行的32位插件而不是在32位應用程序中,內存分配/釋放會失敗?

插件是通用二進制構建和工作在32位主機的罰款,但在收割64位打開它導致其對分配過濾器對象隨機新/刪除指令崩潰。我試圖將它作爲一個64位插件來測試,但同樣的事情發生了。

什麼會導致這種情況發生?

編輯:這裏是崩潰報告的屏幕截圖: enter image description here

+0

我從字面上剛剛發佈完全相同的問題[這裏](http://stackoverflow.com/questions/14309065/64-bit-build-in-osx-inconsistant-malloc-error) 讓我知道,如果你找到答案,我也會這樣做。 –

+2

我猜想32/64位問題是一個紅鯡魚。您的程序中可能還有其他一些內存錯誤,這些錯誤會擾亂內存分配器的內部狀態,但由於某種原因,它只能在您的64位主機上輕鬆顯示。內存錯誤可能會非常棘手。 – jjlin

回答

0

我發現這個問題使用的是64位主機時導致隨機內存錯誤。有一個memset函數引用指向float的指針的大小來清除它的內容。當然,在64位主機上,指針大小爲64位,所以memset函數損壞了堆,導致了不穩定的內存錯誤。

這是memset的功能:

float *z; 
//... 
memset(z, 0, sizeof(z)*size); 

意圖是應該ž最終宣佈了一倍,這將是在此功能自動調整分配的內存塊。我忽略了在64位環境中會發生什麼。

+0

sizeof應該在32位和64位工作...不知道問題是什麼。 –

+0

但它是一個指針的大小。無論指針被聲明爲指向浮點,指針「地址」的大小在32位系統中都是32位,而在64位系統中是64位,即使指向的變量大小爲32位。 – Chris

+0

哦..對不起,錯過了 –

相關問題