2016-04-13 9 views
0

Ich baue nur ein BNode-Objekt. Der Debugger sagt, dass der Konstruktor einen Segmentierungsfehler verursacht. Weiß jemand, was das Problem hier ist? Ich baue nur ein BNode-Objekt. Der Debugger sagt, dass der Konstruktor einen Segmentierungsfehler verursacht. Weiß jemand, was das Problem hier ist?Warum verursacht der Destruktor einen Segmentierungsfehler?

#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; 
} 

Antwort

0

Sie löschen ein Array von pointers und keys, während Sie nie diese zu Arrays definiert. Beide sind Zeiger.

Sie müssen Speicher von den Zeigern befreien, nicht von Arrays.

Versuchen Sie folgendes: -

delete myPointer; 
myPointer = NULL; 

HINWEIS: Wenn Sie C++ verwenden, lesen Sie über intelligente Zeiger. Sie werden sich als nützlich erweisen!

Verwandte Themen