2013-09-22 42 views
0

下面是Objective-C的姐姐的問題,這可能會提供一些見解: c and objective-c -- const char* and char*Ç - 爲const char *與char *鑄造(ADPCM解碼)

我做了以下內容:

g_ADPCMstate.valprev=32767; 
g_ADPCMstate.index=0; 


const char *modulatedBytes1 = {0xca,0x82,0x00,0x00,0x80,0x80,0x80,0x80}; 
char *modulatedBytes = (char *)modulatedBytes1; 
unsigned int moduleatedLength = 8; 
short *decompressedBytes = NULL; 

adpcm_decoder(modulatedBytes, decompressedBytes, moduleatedLength, &g_ADPCMstate); 

該函數聲明爲:

void  
adpcm_decoder(indata, outdata, len, state)  
    char indata[];  
    short outdata[];  
    int len;  
    struct adpcm_state *state; 

g_ADPCMstate是一個adpcm_state結構全局實例變量。 http://codepad.org/5vyd0CXA是完整的代碼。該函數在發生*outp++ = valprev;時崩潰,並從調試器中獲取BAD ACCESS語句。 outp是outData的指針,而valprev是long。

的問題必須是在我的指針的理解,要麼modulatedBytes和/或decompressedBytes

我對C缺乏瞭解和較低水平的概念。我很想深入瞭解我的問題。

回答

2

您將short *decompressedBytes = NULL;作爲outdata的參數傳遞給adpcm_decoder(),然後嘗試對其進行解引用。你忘了分配decompressedBytes嗎?

+0

我該如何分配它?我應該存儲隨機比特嗎? – stackOverFlew

+1

@stackOverFlew只需使用'malloc()'分配它,然後讓'adpcm_decoder'負責初始化它(通過'* outp ++ = valprev'行)。 –