Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在c+;中的空格内分配指针+;_C++_Pointers - Fatal编程技术网

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 < /代码>。谢谢。我改进了答案。