有人可以帮助这个程序中的错误吗?

时间:2014-06-24 13:43:19

标签: c++ pointers

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

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

这是我遇到的面试问题之一。在main()中,它声明一个int指针,在另一个函数中分配内存并尝试在main()本身中使用。我认为这在某种程度上是错误的,但是这有什么用呢,任何想法?

2 个答案:

答案 0 :(得分:2)

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

main

调用未定义的行为

可能的解决方案:

使用指向指针的指针

*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;
}  

答案 1 :(得分:1)

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

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

按引用传递指针,而不是按值传递