崩溃
问题描述:
我有以下结构,类和功能片段:崩溃
结构:
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初始化的。
我修改了这个代码。
答
你还没有给内存中的指针线myData* data
data
并试图分配的东西给it.Alternative方法要么
定义myData data
然后使用&data
为指针
或使用动态内存分配分配内存。
答
你有一对夫妇的不确定的行为,在一小段代码...
- 你有一个双指针,但从来没有“点”或者他们的任何东西。这意味着他们会指向随机存储位置。
- 您打印一个未初始化的字符数组,这意味着它包含随机数据。
- 而且由于您根本没有进行任何初始化,因此
foo.count
也将包含一个随机值,该值可能为负数或非常大。
最后一个机器人并不是最不重要的,就像我在我的评论中说的那样,代码甚至不应该编译,因为在结构中使用错误的语法来访问成员。
这甚至不应该编译! 'data'是一个指针,你使用'.'来访问成员而不是' - >'。 –