使用指针返回值 - 程序崩溃

时间:2012-03-17 07:32:51

标签: c++ pointers crash

我是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

4 个答案:

答案 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指向一个不再有效的内存地址。