如何在堆栈上分配指针指针以及如何在堆上?

时间:2013-05-08 22:09:46

标签: c++ pointers stack heap

这是在堆栈和堆上分配指针指针的正确方法吗?如果没有,那么这样做的正确方法是什么?

int a=7;
int* mrPointer=&a;
*mrPointer;

int** iptr; // iptr is on stack
*iptr=mrPointer; //not OK
int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;

感谢Mat的回答,我知道这是把它放在堆栈上的正确方法:

int** iptr; // iptr is on stack
iptr=&mrPointer;

并在堆上:

int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;

2 个答案:

答案 0 :(得分:5)

如果你想要一个指向最终指向a变量的指针,那么你就是这样做的。

int a=7;
int* mrPointer=&a;
*mrPointer;

int** iptr; // iptr is on stack
iptr=&mrPointer;

修改:澄清一下,在上面的代码中,我将*iptr = mrPointer;更改为iptr = &mrPointer;

这确实会通过堆来指向同一个地方。

int** iptr_h = new int*(); // iptr_h is on heap
*iptr_h=mrPointer;

根据评论编辑解释:

人们还可以看到需要做这样的事情:

int* mrsPointer;
int** iptr = &mrsPointer;
*iptr = mrPointer;

答案 1 :(得分:1)

使用mallocnew为对象分配空间时,它总是会在堆上结束。您可以使用alloca进行堆栈分配,但这要高得多,不推荐使用。