没有正确地将指针列表传递给函数

时间:2013-09-18 07:31:46

标签: c++ arrays pointers

这是我的功能原型:

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参数正确传递。我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

首先,TgtList是一个未初始化的指针数组。其次,您将传递超出数组最后一个元素的地址。

这就是你应该怎么称呼它。

UINT8_t bRetTgts = list1.GetListOfTgts( "C1", TgtList);

答案 1 :(得分:1)

c ++数组中的

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 );

同样在函数原型中指定数组大小并不是你想要它做的事情。