在堆栈上创建的指针被破坏了吗? (包括图表): - )

时间:2015-04-03 13:09:56

标签: pointers buffer

如果我在堆6上创建像素缓冲区10 ....

int * p_buffer = new int [6 * 10]

p_buffer---
          |
          |
          V
          * * * * * * * * * *
          * * * * * * * * * *
          * * * * * * * * * *
          * * * * * * * * * *
          * * * * * * * * * *
          * * * * * * * * * *

然后在一个方法中我创建了6个指针,但我没有将它们定义为“new”,我明白这意味着它们存储在堆栈中。我创建了一个像这样的指针数组:

int *p_row[6];

然后我手动将每个p_row指针放在每行的开头,如下所示:

for (int i = 0; i < 6; i++)
    {
     p_row[i] = p_buffer + (10 * i);
    }

现在我们有:

 p_buffer---
           |
           |
           V
p_row[0]-->* * * * * * * * * *
p_row[1]-->* * * * * * * * * *
p_row[2]-->* * * * * * * * * *
p_row[3]-->* * * * * * * * * *
p_row[4]-->* * * * * * * * * *
p_row[5]-->* * * * * * * * * *

我想知道,如果在执行此操作之后程序离开此函数并返回main(),我是否可以执行以下操作:

p_row[0] = (set my RGB colours);

我已经了解到,如果在堆栈上创建,在函数(本地范围)中创建的东西将被销毁(不分配或使用'new'关键字)。

离开该函数后,指针是否被破坏?我可以参考一下吗?

我知道这是一种非正统的引用字节的方法,但问题在于指针的机制。整个缓冲区是通过p_buffer分配的,我打算在程序退出后删除它。如果答案显而易见,我很抱歉。

此外,指针数组p_row []将成为Screen类的成员,如果这有所不同。

0 个答案:

没有答案