-1

我有以下结构、类和函数片段:

结构体:

struct myData
{
  short index;
  char  name[32];
}

班级:

class myFoo
{
...
public:
   short    count;
   myData** data;
...
}

功能:

int Do_Bar(myFoo vFoo)
{
  ...
  myData* data = *vFoo.data;
  for (short i=0; i<vFoo.count; ++i)
  {
    Printf("%3d %s", data.index, data.name);
  }
  ...
}

函数调用:

...
myFoo foo;
SomeAPI_GetCompleteObjectList(&foo);
Do_Bar(foo);
...

但是我的代码因这些代码而崩溃。但是,如果我删除了参数并myFoo在函数中创建了一个类Do_Bar(),则代码可以正常工作:

int Do_Bar(myFoo vFoo)
{
  myFoo foo;
  SomeAPI_GetCompleteObjectList(&foo);
  ...
  myData* data = *vFoo.data;
  for (short i=0; i<vFoo.count; ++i)
  {
    Printf("%3d %s", data.index, data.name);
  }
  ...
}

为什么?以及如何解决这个问题?

编辑1:

我忘了提到初始化foo是在函数调用之前完成的。这是使用 API 初始化的。

我为此修改了代码。

4

2 回答 2

0

在那一小段代码中有几个未定义的行为......

  • 你有一个双指针,但永远不要将它们中的任何一个“指向”任何东西。这意味着它们将指向随机内存位置。
  • 您打印一个未初始化的字符数组,这意味着它包含随机数据。
  • 而且由于您根本不进行任何初始化,foo.count因此还将包含一个随机值,该值可能为负数或非常大。

最后一个机器人,就像我在评论中所说的那样,代码甚至不应该编译,因为您使用错误的语法来访问结构中的成员。

于 2013-07-12T06:25:33.287 回答
0

您还没有给指针分配内存datamyData* data尝试为其分配一些东西。替代方法是

定义myData data然后&data用作指针

或使用动态内存分配分配内存。

于 2013-07-12T06:20:40.263 回答