gpt4 book ai didi

C++ 指针或内存

转载 作者:行者123 更新时间:2023-11-28 03:07:54 24 4
gpt4 key购买 nike

根据算法,我的代码似乎应该可以正常工作,但我是 C++ 的新手,当我多次调用插入时,这些指针似乎正在覆盖自身。例如,如果我用值 1、3、5 调用 insert,则根将为 1(正如预期的那样),但 3 将被覆盖,并且根的右子节点的值为 5 而不是 3。

virtual bool insert(const Data& item) {
if(root == NULL){
BSTNode<Data> newNode (item);
root = &newNode;
isize++;
return true;
}
BSTNode<Data>* nextNode = root;
BSTNode<Data>* prevNode = NULL;
bool isLeft;
while(nextNode!=NULL) {
if (item < nextNode->data) {
prevNode = nextNode;
nextNode = nextNode->left;
//std::cout << prevNode->data;
isLeft = true;
}
else {
prevNode = nextNode;
nextNode = nextNode->right;
//std::cout << prevNode->data;
isLeft = false;
}
}
BSTNode<Data> createNode (item);
createNode.parent = prevNode;
if (isLeft) prevNode->left = &createNode;
else prevNode->right = &createNode;
isize++;
return true;
}

最佳答案

由于指向将要销毁的本地对象,您有一个无效指针:

BSTNode<Data> newNode (item);
root = &newNode;

对象 newNode 是方法 insert 中的本地对象,从该方法返回后(超出范围),指针 root 将指向到一个被摧毁的物体。解决该问题的一个天真的可能性是通过 new 在堆中分配 newNode:

root = new BSTNode<Data>(item);

但是你必须在某处删除它,对于createNode也是同样的问题。


正如许多人所推荐的,您应该使用诸如 unique_ptrshared_ptr 之类的智能点。

关于C++ 指针或内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19243377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com