我是C ++的新手并尝试使用指针返回值。我写了一个简单的程序,但我无法理解它崩溃的原因。
的main.cpp
int main() {
bool *pMyBool;
bar myBar;
myBar.foo(pMyBool);
cout << *pMyBool << endl;
return 0;
}
bar.cpp
int bar::foo(bool *pMyBool) {
bool myBool = true;
*pMyBool = myBool;
return 0;
}
输出
1
//then it crashes
答案 0 :(得分:4)
你没有在pMyBool
中初始化main()
,所以它指向随机存储器,然后程序崩溃,因为随机存储器不是有效的存储器。
一种可能的解决办法:
int main() {
bool value;
bool *pMyBool = &value;
bar myBar;
myBar.foo(pMyBool);
cout << *pMyBool << endl;
return 0;
}
使用指针,总是需要确保在尝试使用它们之前将它们初始化为指向某处。 始终!强>
答案 1 :(得分:3)
在C ++中,您不希望在您的情况下使用指针,而是使用引用:
int bar::foo(bool &MyBool) {
MyBool = true;
return 0;
}
当然,您只需致电main
bool MyMainBool = false;
bar.foo(MyMainBool);
答案 2 :(得分:2)
pMyBool
未指向任何有效位置。所以你不能取消引用它。
您应该首先分配内存,并使指针指向它。 bool *pMyBool = new bool;
然后释放记忆。 delete pMyBool;
答案 3 :(得分:-1)
这是因为myBool是在“堆栈”中分配的(局部变量);当函数foo退出时,与foo相关联的堆栈被释放,因此指针pMyBool指向一个不再有效的内存地址。