分配指针到指针时出现分段错误
Segmentation fault when assigning pointer to pointer
我有
struct Node{
Node* father;
Node* left_son;
Node* right_son;
char content;
};
void build_tree(Node* node){
Node* left;
left->father=node; //segfault
}
void init(){
Node* root;
build_tree(root);
}
我在build_tree()
中得到段故障。为什么?
Node* left;
这个只是声明了一个指针。什么都没有。没有Node
对象。指针可以指向一个Node
对象,但它不会自动给你一个。事实上,left
是未初始化的,如果不调用未定义的行为,就不能取消引用。
您需要以某种方式分配Node
对象,可能是new
:
Node* left = new Node();
但是别忘了加上delete
您没有初始化left
,因此它指向一个看似随机的位置。解引用随机指针会导致未定义行为,这通常会导致崩溃。
同样适用于main
函数中的root
。
您需要在使用节点之前分配节点
bulid_tree()
函数中的left在您使用它指向父元素之前没有被分配一个有效值。
我不知道build_tree()
是用来做什么的。但是为了解决这个问题,您可以将代码更改为:
void build_tree(Node* node)
{
Node * left = (struct Node *)malloc(sizeof(struct Node));
left->father=node;
}
段错误通常发生在有一条指令试图访问无效/不正确的内存地址时。
函数中的:void build_tree(Node* Node){
Node* left;
——创建一个未初始化的指针,指向某个应该存在的对象。
left->father=node; //segfault
——这里你试图访问指针初始化到的对象的成员,但实际上该对象不存在(没有new - constructor语句),因此访问是无效的访问,导致分段错误。
}
来纠正上面的错误,正如前面的一个SO成员(sftrabbit)所回答的那样,你需要在指针初始化之前添加以下语句:Node* left = new Node();
这一切。希望对大家有所帮助
相关文章:
- 数组的指针从不分段故障
- 分段错误 - 读取初始化指针的数组
- 为什么在将 void 指针转换为整数指针时出现分段错误
- C++为什么我的指针选择排序中存在分段错误?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 尝试将对象插入空指针数组时出现分段错误
- 误用指针会产生分段错误。我仍然不确定如何纠正它
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- C++ 取消引用指向矢量的空指针时的分段错误
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何避免指针超出范围(多态性)的C++分段错误
- 在指针迭代中使用for循环时出现分段错误
- 分配指针时出现分段错误
- C++:在push_back时迭代指针向量时出现分段错误
- 不断得到分段错误和free()无效指针
- 共享内存指针分段错误
- 分叉进程的零星堆栈指针分段错误
- 从线程原因解引用返回的指针;分段故障:11
- c++方法返回指针:分段错误
- C++中的指针;分段错误错误: