問題はタイトルで、削除命令の直前にデバッグするとポインタ(ベクトル)が正常であることがわかりますが、VC++ Express2013の直後のウィンドウで値を変更することもできますプリミティブベクトルの削除例外をスローする
Unhandled exception at 0x55ACDF62 (msvcp120d.dll) in BTREE.EXE: 0xC0000005: Access violation writing location 0xABABABAB.
私のベクトルは、このクラスのベクトルである:それは例外をスロー削除私は値のキーとstd ::文字列をint型を使用したテンプレートで
template<class Key, class Value>
class Pair{
public:
Pair(){
key = Key();
value = Value();
}
Pair(Key key, Value value){
this->key = key;
this->value = value;
}
Key key;
Value value;
};
を、ベクトルこの方法でのみ割り当てられます:
Node(unsigned int max){
nelements = 0;
nchilds = 0;
/*reserva espaço para os elementos e os nós filhos, cada vetor possui uma espaço adicional reservado*/
elements = new Pair<Key, Value>[max];
childs = new Node<Key, Value>*[max + 1];
this->max = max;
for (unsigned int i = 0; i < max + 1; i++)
childs[i] = nullptr;
}
このベクターを用いて
より複雑な操作はここにある:助けるため
~Node(){
for (unsigned int i = 0; i < nchilds; i++)
delete childs[i];
delete[] childs;
delete[] elements;
}
感謝:
left->nelements = middle;
memcpy(left->elements, elements, sizeof(Pair<Key, Value>) * middle);
if (!leaf()){
left->nchilds = middle + 1;
memcpy(left->childs, childs, sizeof(Node<Key, Value>*) * left->nchilds);
}
、ここではデストラクタです。
DIdあなたは一度に一つを削除しようとしましたか?あなたは、ベクターを構築し、それを後で削除することから始めることができます。エラーが表示されるまで、コードを追加してください。 – Quest
'Key'または' Value'のいずれかに使用される実数型が自明でない場合、 'memcpy'の使用は無効であり、結果は未定義です。代わりに 'std :: copy'を使いたいかもしれません。 –