这是我的功能原型:
UINT8_t CTargetList::GetListOfTgts( CHAR_t Callsign[cTGT_MAX_CALLSIGN_CHAR],
sTarget_t* ListOfTgtForCallsign[bNO_OF_TARGETS] );
现在我创建传递给这个函数的结构
sTarget_t* TgtList[bNO_OF_TARGETS];
UINT8_t bRetTgts = list1.GetListOfTgts( "C1",&TgtList[bNO_OF_TARGETS]);
正确创建结构但是当我跟踪函数时,ListOfTgtForCallsign
必须是指针数组。相反,ListOfTgtForCallsign
只包含一个指针而不是bNO_OF_TARGETS
。我希望指针列表TgtList
能够作为ListOfTgtForCallsign
参数正确传递。我究竟做错了什么?
答案 0 :(得分:2)
首先,TgtList
是一个未初始化的指针数组。其次,您将传递超出数组最后一个元素的地址。
这就是你应该怎么称呼它。
UINT8_t bRetTgts = list1.GetListOfTgts( "C1", TgtList);
答案 1 :(得分:1)
是kinda指针。 您正在将指针传递给最后一个元素(bNO_OF_TARGETS)后面的一个指针也可以用作数组(这就是它通过编译的原因)。 你只需要猜测:
sTarget_t* TgtList[bNO_OF_TARGETS];
UINT8_t bRetTgts = list1.GetListOfTgts( "C1", TgtList);
答案 2 :(得分:1)
在list1.GetListOfTgts( "C1", &TgtList[bNO_OF_TARGETS] );
中传递一个越界元素的地址。
应该只是list1.GetListOfTgts( "C1", TgtList );
同样在函数原型中指定数组大小并不是你想要它做的事情。