2016-04-13 25 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

あなたが配列であることをこれらの定義されたことがないのに対し、あなたは、pointerskeys配列を削除しています。 どちらもポインタです。

配列ではなくポインタからメモリを解放する必要があります。

delete myPointer; 
myPointer = NULL; 

注:C++を使用している場合は、スマートポインタについて読む - :

はこれを試してみてください。彼らは便利になるでしょう!

関連する問題