Почему происходит ошибка сегмента инициализации указателя? - PullRequest
0 голосов
/ 28 января 2009

Я создаю указатель на указатель на объект класса, и когда я пытаюсь создать новый объект, используя указатели, он вызывает ошибки. Почему это происходит?

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 ]

2 голосов
/ 28 января 2009

С пустым конструктором Soldier ваш код работает нормально (за исключением исправленных опечаток, таких как строчные буквы level.soldier[])

Пожалуйста, опубликуйте тело конструктора.

2 голосов
/ 28 января 2009

Я не могу найти никаких проблем, связанных с segfault в вашем коде.

Но я не понимаю, почему ваша чувствительность к регистру не совпадает:
Класс называется " Солдат ", а Солдат ** называется " солдат ".

а вы пишите:

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

и

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

Если код действительно компилируется так, как вы его написали, это может быть проблемой.

1 голос
/ 28 января 2009

Возможно i >= level.SoldierCount?

0 голосов
/ 28 января 2009

Какое значение level.SoldierCount? Какова стоимость i

Единственный способ возникновения ошибки - это доступ к нераспределенной памяти. В выделенной строке единственное место, которое может произойти, это массив (или внутри конструктора, для которого вы не опубликовали код). Скорее всего, вы обращаетесь к массиву за пределами.

...