0
我正在寫一個應用程序,並通過指向調用函數傳遞一個動態創建的數組有問題。C通過指針傳遞動態數組(分段錯誤)
我在main中創建一個指針,以包含動態生成的數組,以及一個int來包含該數組的長度。我將這些傳遞給readNDEF()函數。它根據所需內存的讀取分配內存,並將字節讀入生成的數組中。
其次很多答案安寧這裏就類似的問題,但沒有似乎解決它,的給其他錯誤(如棧溢出)
int main(void) {
uint8_t *recordPTR; //creating pointer
uint8_t length=0; //creating length variable
readNDEF(recordPTR, &length);
int i;
for (i=0;i<1;i++){
printf("%x ",*(recordPTR+i)); //segmentation fault happens here
}
}
bool readNDEF(uint8_t *messagePTR, uint8_t *messageLength){
int NDEFlength;
if(!(NDEFlength=getNDEFmessageLength())<0){ //get length
closeSession();
return false;
}
uint8_t tempLength=0x00|NDEFlength;
messagePTR = malloc(tempLength*sizeof(uint8_t)+5); //+5 overhead for the rest of the frame
if(messagePTR == NULL){ //check if mallok ok
return false;
}
if(!ReadBinary(0x0002, (uint8_t)0x00|NDEFlength, messagePTR)){ //read NDEF memory
closeSession();
return false;
}
messagePTR++; //skip first byte in the array
closeSession();
*messageLength = tempLength;
//print the array (Works, data correct)
int i;
for (i=0;i<tempLength;i++){
printf("%02x ",*(messagePTR+i));
}
return true;
}
長度回報像它應該,但數組本身時在for循環中枚舉它會導致分段錯誤。使用其他方式我可以枚舉它沒有錯誤,但數據不正確(隨機數據)可能是因爲它從函數返回後超出範圍。
,以前試過,但可能已經忘記了指針在如果(! ReadBinary(0x0002,(uint8_t)0x00 | NDEFlength,* messagePTR))所以它不工作 – Thomas 2014-08-27 13:25:14
不客氣,進一步成功:) – Ashalynd 2014-08-27 15:57:56