我试着运行这个代码,它只用一个警告('a'可能在这个函数中未初始化......)构建,但在运行时我的计算机崩溃并只显示"Hello world!".
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
int p=20;
int *a;
*a=p;
cout << *a << endl;
cout << &p << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我省略这部分时:
cout << &p << endl;
Run Code Online (Sandbox Code Playgroud)
我将再次发出相同的警告,但代码正常工作.任何人都可以解释发生了什么?
谢谢之前.
因为你现在必须阅读十亿次,未定义的行为意味着任何事情都可能发生.
在实践中,在这种情况下,如果你不采用地址,p那么编译器不需要使它成为一个实际的"对象",并且可以在编译时解决与它有关的所有事情.因此,输出不确定值的命令正在"烘焙"到您的程序中,尽管逻辑无效取消引用.这仍然是未定义的行为,但在运行时没有内存访问,这将导致操作系统使程序崩溃.
只需初始化您的变量,就像您应该的那样.
注意警告.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |