Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++_Pointers - Fatal编程技术网

C++ 有人能帮助解决这个程序中的错误吗?

C++ 有人能帮助解决这个程序中的错误吗?,c++,pointers,C++,Pointers,这是我面临的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存,并尝试在main()本身中使用它。我认为这在某种程度上是错误的,但这又该如何发挥作用呢 void func(int* ptr) { ptr = new int; } int main() { int* ptr; func(ptr); *ptr = 2; } 通过引用而不是通过值传递指针ptr通过值传递给funcn,因此参数ptr仅获取main中的ptr副本。对func

这是我面临的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存,并尝试在main()本身中使用它。我认为这在某种程度上是错误的,但这又该如何发挥作用呢

void func(int* ptr)
{
    ptr =  new int;
}

int main() 
{
    int* ptr;
    func(ptr);
    *ptr = 2;
}

通过引用而不是通过值传递指针

ptr
通过值传递给
funcn
,因此参数
ptr
仅获取
main
中的
ptr
副本。对
func
ptr
的任何更改都不会修改
main
ptr
,因此不会为
main
中的指针
ptr
分配内存。未初始化指针的赋值

void func(int&* ptr)
{
    ptr =  new int;
}

int main() 
{
    int* ptr;
    func(ptr);
    *ptr = 2;
}
调用未定义的行为

可能的解决办法:

使用指向指针的指针

*ptr = 2;    
从函数返回指针:

void func(int** ptr)
{
    *ptr =  new int;
}

int main() 
{
    int* ptr;
    func(&ptr);
    *ptr = 2;
}  
int* func(int* ptr)
{
    ptr =  new int;
}

int main() 
{
    int* ptr;
    ptr = func(ptr);
    *ptr = 2;
}  
使用引用:

void func(int** ptr)
{
    *ptr =  new int;
}

int main() 
{
    int* ptr;
    func(&ptr);
    *ptr = 2;
}  
int* func(int* ptr)
{
    ptr =  new int;
}

int main() 
{
    int* ptr;
    ptr = func(ptr);
    *ptr = 2;
}  

我认为它应该在funct参数上使用reference“&”,而不是在任何地方删除指针。这是内存泄漏。另外,正如其他人所说,您需要通过referecne(或ptr到ptr)传递指针。您确实也应该初始化所有局部变量(
int*ptr;
),在指针指针示例中,
func
的主体应该类似于“*ptr=new int;”不应该吗?@user888379;抢手货在“从函数返回指针”示例中,func是否应在分配内存后返回ptr?@swapycplusplus;对你需要先分配它。