我不擅长英语。但我想变得更好。
当我遇到一些问题时,我正在尝试了解有关 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
我不知道为什么它在“本案”中不起作用。 帮帮我,我要一个解释。谢谢。
最佳答案
当您在循环 (p++
) 中修改 p
时,您丢失了原始指针,因此在循环之后 p
将指向其他地方。在该循环之后对 p
的所有取消引用都将导致未定义的行为。
如果你想让那个取消注释的循环在不改变 p
的情况下工作,你必须使用一个临时变量来完成它:
int** t = p;
for (int i=0; i<2; i++, t++)
*t = new int(y--);
注意:如果您运行两个分配循环,您将有内存泄漏,因为第一个循环分配的指针将被覆盖。
关于c++ - 动态分配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699284/