【发布时间】:2011-05-05 10:16:17
【问题描述】:
当我想将未初始化的指针传递给函数时,它会出现运行时错误。 但是如果我将此指针作为参考传递,它就可以正常工作。我无法解释为什么...
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 调试输出。发布版本中没有出现“错误”
【问题讨论】:
-
你确定第一个给你的是 runtime 错误,而不是 compile-time 错误吗?您收到的错误消息是什么?
-
如果 check() 返回指针,你的生活会轻松很多。
-
我确定。在VS2010中,@“变量'b'正在被使用而没有被初始化。”
-
我认为它不应该给出任何运行时错误。
check results in a memory leak but should not be runtime error。区别在于 CheckRef 将导致内存分配,其指针将在 main 中使用 b。在其他情况下,当 check 返回时,b 仍然是悬空的。 -
@demaxSH:几乎可以肯定不是运行时错误,尽管它可能是从您的调试器中输出的。一个小屏幕截图可以解决这个问题,但这并不重要。
标签: c++ pointers pass-by-reference