2012-05-25 200 views
0

編輯:C++比特除去,以避免混淆麻煩鑄造1D陣列2D陣列

我有數據的數組像這樣

int numSamples = 16; 
float *lData = (float*)calloc(numSamples, sizeof(float)); 

...,我想這個數據傳遞到一個函數與這樣的定義。 。 。

void processSampleBlock (const float ** inputChannelData, 
         int numInputChannels, 
         ...) 

正如你所看到的,這個函數接受一個2D數組,它可以有多個通道。我的數據只有一個通道(1D),但我可以通過像這樣進行轉換來使代碼編譯正確。 。

processSampleBlock ((const float**)(lData), 
          1, 
          ...) 

不過,我在運行時得到一個壞訪問錯誤,則此功能塊嘗試內代碼取消引用函數內的數據。 。

for (int nn=0; nn< numSamples; ++nn) 
{ 
    float x = inputChannelData[0][nn]; //--> Computer says no 
} 

我用C風格的多維數組無用,可能在這裏犯了一個基本錯誤。任何幫助將是偉大的!由於

+0

'的boost :: scoped_array ' - 這是爲什麼標籤C? – Pubby

+0

對不起,我的問題是與C風格的位:) – learnvst

+0

爲什麼不能指向行的指針數組只包含一個指向單行的指針? – learnvst

回答

5

你需要給它一個指向行的一組,所以你有一排給它一個指向該行:

float *data = ...; 
processSampleBlock(&data, 1); 
+0

@Bo,他說他只有1個頻道 – Dani

+0

lData.get()返回一個指針。你發佈的語法給出了一個編譯器錯誤 – learnvst

+0

我已經編輯了這個問題來刪除所有可能混淆的boosty東西。 – learnvst