为什么这个指针 - 指针初始化段错误?

时间:2009-01-28 13:12:53

标签: c++ dynamic-data segmentation-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);

4 个答案:

答案 0 :(得分:2)

我在代码中找不到任何与段错误相关的问题。

但我很困惑为什么你的区分大小写不匹配:
该课程称为“士兵”,士兵**称为“士兵”。

但你写道:

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

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

如果代码在您编写代码时确实编译,则可能是问题所在。

答案 1 :(得分:2)

使用空Soldier构造函数,您的代码可以正常工作(更正的拼写错误除外,如小写level.soldier[]

请发布构造函数体。

答案 2 :(得分:1)

可能是i >= level.SoldierCount

答案 3 :(得分:0)

level.SoldierCount的价值是多少? i

的价值是多少?

发生段错误的唯一方法是访问未分配的内存。在您突出显示的行中,唯一可能发生的地方是数组(或构造函数内部,您没有发布代码)。最有可能的是,你正在越过边界访问数组。