c++ - 动态分配不起作用

标签 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

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

最佳答案

当您在循环 (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/

相关文章:

c++ - 从另一个模板函数中调用模板函数时收到 'expected primary-expression'

c++ - 打开cv 3.0.0 LNK2019报错

c++ - 编写下标非成员函数

javascript - 带有静态查询字符串的动态 URL

java - 我可以在Java中更改循环内的变量名称吗

javascript - 将动态输入字段与 php foreach 结合使用

c++ - 在 C++ 中,new 运算符之后和类型之前的括号 (placement_params) 是什么意思?

c - 结构元素的内存分配

c - realloc() 无效的下一个大小 - 再一次,我知道

c++ - C++ 中的数组和长度