为什么析构函数会导致段错误?
Why does destructor cause segmentation fault?
我所做的就是构造一个 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;
}
您正在删除 pointers
和 keys
的 数组 ,而您从未将它们定义为数组。
这两个都是指针.
您需要从指针而不是数组中释放内存。
试试这个:-
delete myPointer;
myPointer = NULL;
注意:如果您使用的是 C++,请阅读智能指针。它们会派上用场的!
我所做的就是构造一个 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;
}
您正在删除 pointers
和 keys
的 数组 ,而您从未将它们定义为数组。
这两个都是指针.
您需要从指针而不是数组中释放内存。
试试这个:-
delete myPointer;
myPointer = NULL;
注意:如果您使用的是 C++,请阅读智能指针。它们会派上用场的!