内存分配(指针和堆栈)
Memory Allocation (Pointers and Stacks)
我创建了一个指针堆栈,用于创建一个二进制树。虽然我可以用单个节点填充堆栈,但在尝试将顶部节点的内存分配给一个新节点以便创建一个实际的树时,它会segfault。例如:
TreeNode *c = new TreeNode;
c = stack.top(); //this segfaults
我不确定我是否误解了这是如何工作的,但既然两者都是同一类型,c不应该等于堆栈的顶部吗?我已经被这个问题困扰了好几个小时了。
我认为您误解了指针在C++中的工作方式。它们只是表示内存地址的整数值。new
关键字为一个类分配内存,然后调用该类的构造函数。
所以根据你写的
TreeNode *c = new TreeNode;
为树节点分配一个指针。然后为树节点分配内存,调用它的构造函数,并将该内存块的地址分配给指针。
c = stack.top(); //this segfaults
获取函数调用stack.top()返回的地址/指针值,并将其分配给变量c.
正如chris所说,即使你的代码已经工作了,它也是一个泄漏,因为c++中没有垃圾收集器,所以当你执行c=stack.top()时,之前分配的内存就会在堆上丢失。
任一
Treenode *c = new Treenode;
delete c;
c = stack.top();
或
Treenode *c = stack.top();
您可以观察到的问题是在某个地方调用stack.top()。我建议你做这样的指针教程。
http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers
相关文章:
- 从堆栈分配的原始指针构造智能指针
- 使用指针计算堆栈问题的大 O 表示法
- 作为指针注入类后重新创建堆栈对象不好吗?
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 如何按指针查看堆栈跟踪
- 堆栈/帧指针作为外部变量
- 未分配被释放的指针(将堆栈实现为链表时)
- 唯一指针是否在堆或堆栈上分配内存?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- C++设置堆栈指针
- 启用优化时的堆栈指针比较异常
- 从堆栈指针中查找函数参数值
- 分叉进程的零星堆栈指针分段错误
- Ostream操作员Strangley不接受我的堆栈指针
- 如何展开堆栈以获取指定堆栈指针(SP)的回溯
- 删除具有堆栈指针的派生类
- 基于整数的函数递增/递减堆栈指针
- 使用c++,我如何获得堆栈指针的值在msvc X64
- 通过创建局部变量减少堆栈指针
- 是堆栈指针,是伪随机数的良好来源