_CrtIsValidHeapPointer(pUserdata)AND _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

时间:2012-05-26 03:36:53

标签: c++ visual-studio-2010 visual-c++

  

可能重复:
  What is The Rule of Three?

我刚刚“完成”了我的AVL树实现,并开始测试以前使用普通二进制搜索树的内容。但是现在我在调用bsTree构造函数时遇到这些断言错误。

_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)是第一个,如果我继续windows吐出下一个。 _CrtIsValidHeapPointer(pUserdata)

TYPE在type.h中定义为Signal *我打算将其更改为使用模板或其他用于多态实现的内容,但这对初始设置来说似乎很简单。

主要执行:

#include<string>
#include<iostream>
#include<fstream>
#include"binSearchTree.h"
;
using namespace std;

int main(){

string word;
int i = 0;
ifstream book ("AV1611Bible.txt");

if(book.is_open()){

    book >> word;

    bsTree* tree = new bsTree(new Signal(word));

    while( book.good()){
        book >> word;
        tree->addValue(new Signal(word));
        //cout << word;
        cout << i++ << "\n";
    }
    book.close();
}


return 0;
}

bsTree构造函数:

#include"binSearchTree.h"

;
using namespace std;

bsTree::bsTree(){

root = new Node();
size = 0;
}

bsTree::bsTree(TYPE v){
root = new Node(v);
size = 0;
}

bsTree::~bsTree(){
delete root;
}

信号构造函数:

#include"signal.h"


using namespace std;


Signal::Signal(){
signal = "";
count = 0;
prob = 0;
}

Signal::Signal(string s){
Signal(s,0);
}

Signal::Signal(string s, double p){
signal = s;
count = 0;
prob = p;
}

Signal::Signal(string s, int n, double p){
signal = s;
count = n;
prob = p;
 }

Signal::~Signal(){
delete(&signal);
delete(&count);
delete(&prob);
}

2 个答案:

答案 0 :(得分:0)

上面显示的代码具有未定义的行为,因为例如delete未分配new的内容,然后任何可能会发生,包括您看到的任何行为(您忘记描述)

答案 1 :(得分:-4)

Xeo是对的。析构函数正在访问它无法访问的内存。