gpt4 book ai didi

C 通过指针传递动态数组(段错误)

转载 作者:行者123 更新时间:2023-11-30 15:30:36 25 4
gpt4 key购买 nike

我正在编写一个应用程序,但在通过指向调用函数的指针传递动态创建的数组时遇到问题。

我在 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 循环中枚举数组时,数组本身会出现段错误。使用其他方法,我可以枚举它而不会出现错误,但数据不正确(随机数据),可能是因为从函数返回后它超出了范围。

最佳答案

您的 readNDEF 方法为该方法内的对象分配内存(因为指针类型的参数与 C 中的任何其他参数一样,是按值传递的)。因此,外部的指针没有改变,并且该函数内分配的内存丢失了(内存泄漏)。您需要传递一个指针到指针才能实现您想要的:

bool readNDEF(uint8_t **messagePTR, uint8_t *messageLength){
///
*messagePTR = malloc(tempLength*sizeof(uint8_t)+5);
}

并相应地调用它:

readNDEF(&recordPTR, &length);

关于C 通过指针传递动态数组(段错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com