問題是標題,在刪除指令之前調試時,我可以看到指針(向量)很好,我甚至可以通過VC++ Express2013立即窗口修改它的值,但是之後在刪除它拋出異常:原始向量刪除拋出異常
Unhandled exception at 0x55ACDF62 (msvcp120d.dll) in BTREE.EXE: 0xC0000005: Access violation writing location 0xABABABAB.
我的矢量是這個類的一個向量:
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;
};
在我使用int的關鍵和std ::字符串值模板
,矢量僅通過此方法分配:
使用該載體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;
}
更復雜的操作在這裏:
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);
}
,這裏是析構函數:
~Node(){
for (unsigned int i = 0; i < nchilds; i++)
delete childs[i];
delete[] childs;
delete[] elements;
}
感謝幫助。
DId你試圖在一次消除一件事?您可以從構建矢量開始,然後刪除它。添加更多代碼,直到出現錯誤。 – Quest
如果'Key'或'Value'的實際類型不重要,則使用'memcpy'無效,結果未定義。您可能想使用'std :: copy'代替。 –