2009-01-28 74 views
-1

我創建了一個類對象的指針指針,當我嘗試使用指向它的seg-fault創建一個新對象時。爲什麼會發生?爲什麼這個指針初始化段錯誤?

struct Level 
{ 
     int SoldierCount; 
     Soldier **soldier; 
     int taskCount; 
     int *taskPercentage; 
     int *taskBitmapX; 
     int *taskBitmapY; 
}level; 

void createMap() 
{ 
    //Input and Declartion of various variabls goes here 

    level.soldier = new Soldier* [level.SoldierCount]; 

    //Seg Faults Here 
     level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);  

} 

的戰士類的構造函數:

Soldier(int, int, int, int); 
+0

你能提供你的士兵構造嗎? – 2009-01-28 13:22:37

回答

2

Soldier構造你的代碼工作正常(除糾正錯別字,像小寫level.soldier[]

請張貼在構造函數體。

2

我無法找到代碼中任何段錯誤相關的問題。

但我很困惑,爲什麼你的大小寫不匹配:
類被稱爲「士兵」和士兵**被稱爲「士兵」。

但是你寫:

level.soldier = new soldier* [level.SoldierCount]; 

和:

level.Soldier[i] = new Soldier(initX, initY, initDirection, steps); 

如果真的代碼編譯爲你寫的吧,這可能是問題。

+0

我的不好。現在更正了代碼。 – strider24 2009-01-28 13:24:51

+0

在向其他人展示時始終複製/粘貼源代碼。如果我們無法確定您發佈的代碼是否是您的代碼,那麼我們如何才能回答這個問題?複製/粘貼,所以你不會引入錯誤或其他錯誤,這些錯誤在你正在使用的實際代碼中不存在。 – jalf 2009-01-28 13:27:22

0

level.SoldierCount的值是多少? i

什麼是段錯誤發生的唯一方法是如果您訪問未分配的內存。在你突出顯示的行中,唯一可以發生的地方是在數組中(或者在你沒有發佈代碼的構造函數中)。最有可能的是,你正在訪問數組越界。

1

可能i >= level.SoldierCount