C++ 无法在c+;中的空格内分配指针+;
当我尝试使用它并访问指针时,我得到“分段错误(内核转储)”……我不知道为什么C++ 无法在c+;中的空格内分配指针+;,c++,pointers,C++,Pointers,当我尝试使用它并访问指针时,我得到“分段错误(内核转储)”……我不知道为什么 void insert(noAB *no, int chave){ no=new noAB(chave); } 如果insert()函数必须修改指针,则需要将指针传递给指针: void insert(noAB **no, int chave){ if (no != nullptr) *no=new noAB(chave); } 然而,正如MalSalter在评论中所观察到
void insert(noAB *no, int chave){
no=new noAB(chave);
}
如果insert()
函数必须修改指针,则需要将指针传递给指针:
void insert(noAB **no, int chave){
if (no != nullptr)
*no=new noAB(chave);
}
然而,正如MalSalter在评论中所观察到的,C++的方式是依赖于引用:
void insert(noAB *&no, int chave){
no=new noAB(chave);
}
或者,您可以返回对象的地址:
noAB* insert(int chave){
return new noAB(chave);
}
您正在按值传递指针。试试这个:
void insert(noAB **no, int chave){
*no=new noAB(chave);
}
使用调试器。您会发现这一行没有出现分段错误。不过,这一行有内存泄漏。@Alton000:“在
void
中”相当混乱void
是一个类型名称。我想你的意思是在void
函数中,即在一个不返回任何内容的函数中。这就是问题所在:你不返回新的指针。C++中的常见解决方案是<代码> NOAB *和NO.<代码>,但是如果你忽略它,你应该检查<代码> NulLPTR < /代码>。谢谢。我改进了答案。