我有以下结构,类和函数代码段:
结构:
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);
}
...
}
为什么?以及如何解决这个问题?
EDIT1:
我忘了提到foo
的初始化是在函数调用之前完成的。这是使用API初始化的。
我为此修改了代码。
答案 0 :(得分:0)
你没有给行data
中的指针myData* data
留下内存,并试图给它指定一些东西。替代方法是
定义myData data
,然后使用&data
作为指针
或使用动态内存分配来分配内存。
答案 1 :(得分:0)
在那段小代码中你有几个未定义的行为 ......
foo.count
也会包含一个随机值,可能是负值或非常大。最后一个机器人,就像我在评论中所说的那样,代码甚至不应该编译,因为你使用错误的语法来访问结构中的成员。