2012-05-26 50 views
-2

可能重複:
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); 
} 
+0

除了[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

+0

您也沒有顯示'Node'的定義,幾乎可以看到也沒有遵守三條規則 – Xeo

+0

關於命名空間,我沒有到處都是,然後Visual Studio抱怨,當我把它們放進去時,停下來。我發佈了一段時間後我發現了這個問題。我的解構器會導致刪除問題,我會研究三條規則: 我最初是在java上學的,沒有用C++進行任何正式培訓,只是爲了得到一些東西的感覺。 – ProdigousRanger

回答

-4

XEO是正確的。析構函數正在訪問它無法訪問的內存。

0

上面所示的碼具有未定義行爲,由於例如的東西delete,這不是用new分配,然後什麼可能發生,包括任何行爲,那就是你看到(你忘了介紹)

相關問題