2009-11-29 193 views
1

我有一個像這樣的我的char數組的指針。傳遞一個指向字符數組的指針到函數

unsigned char *recvBuf; 
    recvBuf = (unsigned char *)malloc(sizeof(char)*RECVBUF); 

然後我傳遞到定義爲

void setHeader(MyHeader *myHeader, unsigned char *buffer) 

我嘗試,並在以後傳遞給另一個功能上

哪個副本的前12個字節成一個結構

然後,功能

Record readRecord(unsigned char *buffer, int *arrayPosition, int buffsize) 

但是,當我嘗試訪問數組的任何部分時,程序總是變得無響應以與之前的功能中使用的完全相同的方式。在我將它傳遞給函數之前,我也很好地訪問它。

想法將不勝感激。

感謝

編輯:

指針是相同的。

這是第二個功能

我將此代碼添加到頂部內,它工作得很好

int k = *arrayPosition; 
    printf("%p \n", buffer); 

    printf("%c \n", buffer[k]); 

這是原來的代碼,程序無響應adfter I = * arrayposition ..

int i, j; 
Record *myRecord; 
Resource *myResource; 
unsigned char name[255]; 
unsigned char data[50]; 
unsigned int offset; 

i = *arrayPosition; 

while(buffer[i] != '\0') 
{ 
    if((buffer[i] & 0xC000) == 0xC000) 
    { 
+0

你確定你不修改函數內某個函數的值嗎?插入數據時您是否取消引用指針? – Jack 2009-11-29 02:09:12

+2

一些風格問題:在C(但不是C++)中,它通常被認爲是不好的風格來轉換'malloc'的返回值,因爲'void *'被隱式轉換爲任何其他指針類型。另外,'sizeof(char)'在C(和C++)中總是1,所以乘以它是多餘的。第二行代碼應該是這樣的:'recvBuf = malloc(RECVBUF);'。 – bcat 2009-11-29 02:13:01

+0

我認爲大多數編譯器會刪除冗餘。有時它只是用來編寫更清晰的代碼:size_of_item * number_of_items – Jack 2009-11-29 02:16:41

回答

2

真的需要更多的上下文來幫助這裏,沒有什麼明顯不符合你所說的話。

基礎:

  1. 檢查你有沒有過索引的 內存塊的結尾。
  2. 檢查您是否通過 & recvBuf您的意思是通過 recvBuf?一個編譯器應該可以捕獲這個,但是如果你這樣做了,你可能會使用一個強制轉換。
1

輸入不足以確定導致指針變壞的問題,但如果指針在您描述的函數調用之間改變,那麼使用gdb進行檢查是一個好方法。

你是否修改數組的任何字符?在這種情況下,您應該用*取消引用指針。

如果無法調用後使用指針的原因可能是:

  1. 它是在函數內部錯誤地改變
  2. 它是一個指針到被隱式釋放某處堆棧分配的值(但它聽起來很奇怪)