两个几乎完全相同的C++程序,一个运行良好但另一个运行时出错

Cha*_*Gao 5 c++ pointers runtime-error class

比较以下两段代码:

1.

#include <iostream>
using namespace std;
class B{
public:
    int val;
};
int main(){
    B *b;
    int t = 0;
    b->val = 1;
    cout << 123 << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2.

#include <iostream>
using namespace std;
class B{
public:
    int val;
};
int main(){
    B *b;
    b->val = 1;
    cout << 123 << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

两个版本都编译.代码#1运行良好,但代码#2运行错误.

我正在使用C++ 11编译并运行Windows机器.

这真让我困惑.谁能告诉我原因?

Die*_*Epp 14

两者都错了.该b指针未初始化,所以你不应该通过它来访问内存.

B *b;
b->val = 1;
Run Code Online (Sandbox Code Playgroud)

所以当其中一人坠毁时你很幸运.

另一个你运气不好,并没有崩溃.

修复

你可以删除间接...

B b;
b.val = 1;
Run Code Online (Sandbox Code Playgroud)

或者你可以分配它......

std::unique_ptr<B> b(new B());
b->val = 1;
Run Code Online (Sandbox Code Playgroud)

  • +1幸运/不幸! (2认同)