使用未初始化的指针作为函数参数

dem*_*xSH 4 c++ pointers pass-by-reference

由于我想将未初始化的指针传递给函数,因此会出现运行时错误.但如果我将此指针作为参考传递,它就可以正常工作.我无法解释为什么......

class Body
{

};

void check(Body* b)
{
    b = new Body();
}

void checkRef(Body* &b)
{
    b = new Body();
}

int main001()
{
    Body* b;

    //check(b);// error: The variable 'b' is being used without being initialized. (in VS2010)
    checkRef(b); // OK


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

什么是传递给check和checkRef的差异?我在VisualStudio2010中遇到运行时错误.错误:正在使用变量'b'而未进行初始化.

编辑:这是一个VS2010调试输出.发布版本中不会出现"错误"

Gre*_*ill 7

为了与checkRef版本等效,您的check函数应为:

void check(Body** b)
{
    *b = new Body();
}
Run Code Online (Sandbox Code Playgroud)

并称为

check(&b);
Run Code Online (Sandbox Code Playgroud)

如果你没有像你一样传递地址,check(b)那么你传递的指针的当前b确实是未初始化的.


Eri*_*rik 2

In b 是inBody * &b的别名/引用- 因此当您分配给它时,您会修改in 。In b 是in的本地副本,您正在修改此本地副本而不是in 。bmainbmainBody* bbmainbmain

您的运行时错误可能是由于使用了未初始化bmain.

编辑:您得到的实际错误是编译器嵌入到代码中的额外检查典型问题机制。它检测到您传递了未按值初始化的内容,这是没有意义的,因此会生成此错误。

如果禁用此行为,应用程序将显示正常运行,直到您尝试取消引用未初始化bmain