动态分配不起作用

时间:2013-12-20 08:30:45

标签: c++ dynamic allocation

我不擅长英语。但我想要更好。

我想知道更多关于Pointer的事情,而我遇到了一些问题。

一些代码行:

main()
{    
     // Declerations
     int y = 99;
     int** p = new int*[2];


     // Set value
     // Ok
     for (int i=0; i<2; i++)
         p[i] = new int(y--);

     /* This case, it's fail
     for (int i=0; i<2; i++, p++)
         *p = new int(y--);
     */

     //Print
     for (int i=0; i<2; i++)
         cout << p[i][0] << " ";

     // release memory
     for (int i=0; i<2; i++)
         delete p[i];
     delete[] p; 

     getch();
}

这是我在这个代码块中对**指针的思考。

http://i.stack.imgur.com/EJaUX.png

我不知道为什么它在“本案例”中不起作用。 帮助我,我想要一个解释。感谢。

1 个答案:

答案 0 :(得分:3)

当您在循环中修改pp++)时,您会松开原始指针,因此循环p将指向其他位置。在该循环之后取消引用p将导致未定义的行为

如果您希望该outcommented循环工作,而不更改p,则必须使用临时变量:

int** t = p;
for (int i=0; i<2; i++, t++)
    *t = new int(y--);

注意:如果你运行两个分配循环,你将会有内存泄漏,因为第一个循环分配的指针将被覆盖。