为什么析构函数导致分段错误?

时间:2016-04-13 04:03:09

标签: destructor

我所做的就是构造一个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;
}

1 个答案:

答案 0 :(得分:0)

您正在删除pointerskeys数组,而您从未将它们定义为数组。 这两个都是 指针

你需要从指针中释放内存,而不是数组。

试试这个: -

 delete myPointer;
 myPointer = NULL;

注意:如果您使用的是C ++,请阅读智能指针。它们会派上用场!