可能重複:
What is The Rule of Three?_CrtIsValidHeapPointer(pUserdata)和_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
我剛 「已完成」 我的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);
}
除了[missing copy ctor和copy assignment operator](http://stackoverflow.com/q/4172722)之外,在這段代碼中有太多錯誤*首先,停止['using namespace std ;'](http://stackoverflow.com/q/1452721)。其次,不要「新」一切,這不是Java或C#。第三,永遠不要刪除非指針! (你沒有顯示頭文件,但是我很確定'signal','count'和'prob'是* not *指針。第四,使用[智能指針](http://stackoverflow.com/q/ 106508)*如果*您必須使用動態分配(和[使用正確的一個])(http://stackoverflow.com/q/8706192)) – Xeo
您也沒有顯示'Node'的定義,幾乎可以看到也沒有遵守三條規則 – Xeo
關於命名空間,我沒有到處都是,然後Visual Studio抱怨,當我把它們放進去時,停下來。我發佈了一段時間後我發現了這個問題。我的解構器會導致刪除問題,我會研究三條規則: 我最初是在java上學的,沒有用C++進行任何正式培訓,只是爲了得到一些東西的感覺。 – ProdigousRanger