2016-04-14 4 views
1

У меня возникло много проблем с этим и запущено через отладчик, но я все еще не могу понять проблему. Существует ошибка сегментации, вызванная попыткой доступа к элементу массива указателей, который должен быть инициализирован до нуля. Строка, вызывающая проблему, приведена ниже. Любые рекомендации относительно того, почему эта ошибка происходит, будут высоко оценены.Массив указателей, почему ошибка сегментации?

class BNode 
{ 
public: 
    const int m = 6; 
    BNode(); 
    ~BNode(); 
    int keyCount; 
    BNode **pointers; 
    int *keys; 
    void split(int index, BNode *child); 
    void _insert(int value); 
}; 

BNode::BNode() 
{ 
    pointers = new BNode*[m]; 
    cout <<pointers[0]->keyCount; //THIS IS THE TROUBLE LINE************** 
    keys = new int[m - 1]; 
    keyCount = 0; 
} 
+0

Я также должен сказать, что линия находится там только для целей тестирования, я понимаю, что бессмысленно иметь ее там – user5932842

ответ

2

Ваш конструктор выделил массив для шести указателей.

Вы получили доступ к объекту, на который ссылается первый указатель.

Проблема в том, что вы не выделили никаких объектов. Ваши шесть указателей неинициализированы.

new BNode*[6]; // ...essentially 

Это выделяет шесть указателей. Это не выделяет шесть объектов. Две совершенно разные вещи.

Смежные вопросы