崩溃

问题描述:

我有以下结构,类和功能片段:崩溃

结构:

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

但我的代码崩溃与这些代码。但是,如果我删除了参数和Do_Bar()函数创建一个myFoo类代替,代码工作正常:

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

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

EDIT1:

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

我修改了这个代码。

+1

这甚至不应该编译! 'data'是一个指针,你使用'.'来访问成员而不是' - >'。 –

你还没有给内存中的指针线myData* datadata并试图分配的东西给it.Alternative方法要么

定义myData data然后使用&data为指针

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

你有一对夫妇的不确定的行为,在一小段代码...

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

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