2016-04-13 2 views
0

Все, что я делаю, это объект BNode. Отладчик говорит, что конструктор вызывает ошибку сегментации. Кто-нибудь знает, в чем проблема? Все, что я делаю, это построить объект BNode. Отладчик говорит, что конструктор вызывает ошибку сегментации. Кто-нибудь знает, в чем проблема?Почему деструктор вызывает ошибку сегментации?

#ifndef BTree_H 
#define BTree_H 

#include <iostream> 
#include <fstream> 
#include <cctype> 
#include <string> 
#include <sstream> 
#include <cmath> 

using namespace std; 

template <typename T> 
class BNode 
{ 
public: 
    BNode(); 
    BNode(int M); 
    ~BNode(); 
    int keyCount; 
    BNode *pointers; 
    T *keys; 
}; 

template<typename T> 
BNode<T>::BNode() 
{ 

} 

template<typename T> 
BNode<T>::BNode(int M) 
{ 
    pointers = new BNode<T>[M]; 
    keys = new T[M - 1]; 
} 

template<typename T> 
BNode<T>::~BNode() 
{ 
    delete[] pointers; 
    delete[] keys; 
} 

#endif 

int main() 
{ 
    BNode<int> obj(5); 
    return 0; 
} 

ответ

0

Вы удаление массива из pointers и keys, в то время как вы не определили эти, чтобы быть массивы. Оба они: указатели.

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

Попробуйте это: -

delete myPointer; 
myPointer = NULL; 

Примечание: Если вы используете C++, читать о смарт-указатели. Они пригодится!