gpt4 book ai didi

c++ - C++中new的使用

转载 作者:行者123 更新时间:2023-11-28 00:04:44 25 4
gpt4 key购买 nike

super 愚蠢的问题,我想用c++创建一个二叉树,下面是我的代码

include <iostream>
using namespace std;

struct tree{
tree * child_left = NULL;
tree * child_right = NULL;
int root;
tree * parent = NULL;
};

int main(int argc, const char * argv[]) {
tree *t1 = new tree;
tree *t2 = new tree;
tree *t3 = new tree;
tree *t4 = new tree;
tree *t5 = new tree;
tree *t6 = new tree;
tree *t7 = new tree;
t4->root = 1;
t5->root = 3;
t6->root = 6;
t7->root = 9;
t2->root = 2;
t2->child_left = t4;
t2->child_right = t5;
t3->root = 7;
t3->child_left = t6;
t3->child_right = t7;
t1->root = 4;
t1->child_left = t2;
t1->child_right = t3;
cout << t1->child_left->child_right->root;
return 0;
}

这实际上可以工作,但如果我在声明这些节点时删除了新节点,xcode 将出现类似 (Thread1: EXC_BAD_ACCESS(code = 1, address = 0x10)) 的错误。

我想知道是什么导致线程问题以及为什么在声明这些节点时需要使用 new。

提前致谢。

最佳答案

您正在声明指向树对象的指针。如果不使用 new,您就不会为这些指针分配任何指向的对象。

int main(int argc, const char * argv[]) {
tree t1, t2, t3, t4, t5, t6, t7;

t4.root = 1;
t5.root = 3;
t6.root = 6;
t7.root = 9;
t2.root = 2;
t2.child_left = &t4;
t2.child_right = &t5;
t3.root = 7;
t3.child_left = &t6;
t3.child_right = &t7;
t1.root = 4;
t1.child_left = &t2;
t1.child_right = &t3;
cout << t1.child_left->child_right->root;
return 0;
}

这负责在堆栈上创建对象,然后在作用域结束时自动销毁这些对象。

tree 可能应该有一个接受参数的构造函数,以便您创建一个对象而不是一袋数据。

关于c++ - C++中new的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414270/

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