我不擅长英语。但我想要更好。
我想知道更多关于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
我不知道为什么它在“本案例”中不起作用。 帮助我,我想要一个解释。感谢。
答案 0 :(得分:3)
当您在循环中修改p
(p++
)时,您会松开原始指针,因此循环p
将指向其他位置。在该循环之后取消引用p
将导致未定义的行为。
如果您希望该outcommented循环工作,而不更改p
,则必须使用临时变量:
int** t = p;
for (int i=0; i<2; i++, t++)
*t = new int(y--);
注意:如果你运行两个分配循环,你将会有内存泄漏,因为第一个循环分配的指针将被覆盖。