-2

重複の可能性:
三つのルールとは何ですか?

私はAVLツリーの実装を「終了」し、以前は通常の二分探索木で機能していたものをテストしました。しかし、bsTreeコンストラクターが呼び出されると、これらのアサーションエラーが発生します。

_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)が最初で、続行するとウィンドウが次のウィンドウを吐き出します。_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);
}
4

2 に答える 2

0

上に示したコードは、たとえば、が割り当てられていないために未定義の動作をしています。その後、表示されている動作(説明するのを忘れた)を含め、何かが発生する可能性があります。deletenew

于 2012-05-26T04:37:01.303 に答える
-4

Xeoは正しかった。デストラクタは、アクセスできないメモリにアクセスしていました。

于 2012-05-27T04:22:54.360 に答える