【问题标题】:Why Does This Pointer-Pointer Initialization Seg Fault?为什么这个指针-指针初始化 Seg 错误?
【发布时间】:2009-01-28 13:12:53
【问题描述】:

我创建了一个类对象的指针,当我尝试使用指针创建一个新对象时,它会出现段错误。为什么会这样?

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);

【问题讨论】:

  • 你能提供你的士兵构造函数吗?

标签: c++ dynamic-data segmentation-fault


【解决方案1】:

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

请发布构造函数主体。

【讨论】:

  • 构造函数是问题所在,我一直忽略它。谢谢。
【解决方案2】:

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

但我对为什么您的区分大小写不匹配感到困惑:
班级被称为“Soldier”,而士兵**被称为“soldier”。

但是你写:

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

和:

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

如果代码真的像你写的那样编译,这可能就是问题所在。

【讨论】:

  • 在向他人展示时始终复制/粘贴源代码。如果我们不能确定您发布的代码就是您拥有的代码,我们怎么可能回答这个问题?复制/粘贴,因此您不会引入您正在使用的实际代码中不存在的拼写错误或其他错误。
【解决方案3】:

可能是i >= level.SoldierCount

【讨论】:

    【解决方案4】:

    level.SoldierCount 的值是多少? i的值是多少

    发生段错误的唯一方法是访问未分配的内存。在您突出显示的行中,唯一可能发生的位置是在数组中(或在构造函数中,您没有为其发布代码)。很可能,您访问的数组越界。

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多