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

标签 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;
}

b传给check和checkRef有什么区别?我在 VisualStudio2010 中遇到运行时错误。错误:正在使用变量“b”而未初始化。

编辑:这是一个 VS2010 调试输出。 “错误”没有出现在发布版本中

最佳答案

为了等价于checkRef版本,你的 check函数应为:

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

并称为

check(&b);

如果您不传递地址,就像您在 check(b) 中所做的那样,那么您传递的是指针 b 的当前这确实是未初始化的。

关于c++ - 使用未初始化的指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5896062/

相关文章:

c++ - inline void addTask(Task task) vs inline void addTask(const Task &task)

c++ - abs vs std::abs,引用说明了什么?

c++ - 全局变量可以在C++的各个类中访问和修改吗

c - 寻找有效的交换字符指针

c pointer assignment to pointer to pointer 是什么意思

Javascript with Parse - 使用异步循环保存

c++ - 避免无意中复制对象——可用的技术

c++ - 具有不同编译器版本的 C++ 中的奇怪行为(字符串通过引用传递): See simple program illustration

c++ - avcodec_receive_packet 中的错误(gdi screenshot + ffmpeg)

c++ - 静态库 API 问题(std::string 与 char*)