Where(new int *)指向的地方

时间:2014-01-13 10:29:36

标签: c++ visual-studio-2012 new-operator

我在vs2012中做了一些测试,代码如下:

在调试模式下:

int *b; int *a = b;   //  Crash!!
int *b = *(new int*); int *a = b;  //this is ok

我很好奇为什么会这样。默认情况下(new int *)是否指向某个实内存? 由于它是在非调试模式下运行的,所以我想知道编写这样的代码是否可以

1 个答案:

答案 0 :(得分:1)

  

我很好奇为什么会这样。

由于使用了未初始化对象的值,两者都有未定义的行为。虽然令人惊讶的是这应该崩溃,但没有理由认为它不会以某种不可预测的方式出错。

取消引用未初始化的指针(例如int a = *b;而不是int *a = b;),更有可能导致崩溃。你确定你没有这样做吗?

  

默认情况下(new int *)是否指向某个实内存?

int**返回的new int*确实如此。它指向的int*未初始化。

  

如果可以写这样的代码

编写具有未定义行为的代码永远不行。即使它似乎“有效”,它也会在你最不期望的时候再次咬你。