0

这是我拥有的函数原型:

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我究竟做错了什么?

4

3 回答 3

2

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

你应该这样称呼它。

UINT8_t bRetTgts = list1.GetListOfTgts( "C1", TgtList);
于 2013-09-18T07:42:49.863 回答
1

在 C++ 中,数组是一种指针。您在最后一个元素(bNO_OF_TARGETS)之后传递一个指针,巫婆也可以用作数组(这就是它通过编译的原因)。猜你只需要:

sTarget_t* TgtList[bNO_OF_TARGETS];
UINT8_t bRetTgts = list1.GetListOfTgts( "C1", TgtList);
于 2013-09-18T07:38:26.323 回答
1

list1.GetListOfTgts( "C1", &TgtList[bNO_OF_TARGETS] );您传递越界元素的地址。

应该只是list1.GetListOfTgts( "C1", TgtList );

此外,在函数原型中指定数组大小并不能满足您的要求。

于 2013-09-18T07:46:45.187 回答