崩潰

2013-07-12 41 views
-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); 
... 

但我的代碼崩潰與這些代碼。但是,如果我刪除了參數和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'是一個指針,你使用'.'來訪問成員而不是' - >'。 –

回答

0

你還沒有給內存中的指針線myData* datadata並試圖分配的東西給it.Alternative方法要麼

定義myData data然後使用&data爲指針

或使用動態內存分配分配內存。

0

你有一對夫婦的不確定的行爲,在一小段代碼...

  • 你有一個雙指針,但從來沒有「點」或者他們的任何東西。這意味着他們會指向隨機存儲位置。
  • 您打印一個未初始化的字符數組,這意味着它包含隨機數據。
  • 而且由於您根本沒有進行任何初始化,因此foo.count也將包含一個隨機值,該值可能爲負數或非常大。

最後一個機器人並不是最不重要的,就像我在我的評論中說的那樣,代碼甚至不應該編譯,因爲在結構中使用錯誤的語法來訪問成員。