我在vs2012中做了一些测试,代码如下:
在调试模式下:
int *b; int *a = b; // Crash!!
int *b = *(new int*); int *a = b; //this is ok
我很好奇为什么会这样。默认情况下(new int *)是否指向某个实内存? 由于它是在非调试模式下运行的,所以我想知道编写这样的代码是否可以
答案 0 :(得分:1)
我很好奇为什么会这样。
由于使用了未初始化对象的值,两者都有未定义的行为。虽然令人惊讶的是这应该崩溃,但没有理由认为它不会以某种不可预测的方式出错。
取消引用未初始化的指针(例如int a = *b;
而不是int *a = b;
),更有可能导致崩溃。你确定你没有这样做吗?
默认情况下(new int *)是否指向某个实内存?
int**
返回的new int*
确实如此。它指向的int*
未初始化。
如果可以写这样的代码
编写具有未定义行为的代码永远不行。即使它似乎“有效”,它也会在你最不期望的时候再次咬你。