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)