【问题标题】:Can someone help what is incorrect in this program? [duplicate]有人可以帮助这个程序中的错误吗? [复制]
【发布时间】:2023-03-24 16:40:02
【问题描述】:
void func(int* ptr)
{
    ptr =  new int;
}

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

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

【问题讨论】:

  • 我认为应该在funct参数上使用引用“&”
  • 您没有在任何地方删除指针。那是内存泄漏。另外,正如其他人所说,您需要通过referecne(或ptr到ptr)传递指针。你真的应该初始化所有的局部变量(int* ptr; 这里)。

标签: c++ pointers


【解决方案1】:

ptr 按值传递给funcn,因此参数ptr 只获取mainptr 的副本。对funcptr 的任何更改都不会修改mainptr,因此不会为main 中的指针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;
}  

使用参考:

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

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

【讨论】:

  • 在指针示例中,func 的主体应该看起来像` *ptr = new int;` 不是吗?
  • @user888379;好收获!
  • 在'从函数返回指针'的例子中,func应该在分配内存后返回ptr吗?
  • @SwappyCplusplus;是的。你需要先分配它。
【解决方案2】:
void func(int&* ptr)
{
    ptr =  new int;
}

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

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

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多