Можно создать дубликат:
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 качестве сигнала * Я планирую изменить это использовать шаблоны или что для полиморфной реализации, но это казалось простым для начальной настройки.
Основной выполнение:
#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);
}
Помимо [отсутствующего экземпляра ctor и оператора присваивания копий] (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