C ++指向整个数组的指针。内存释放

时间:2015-05-19 00:14:09

标签: c++

在其中一个论坛上,我找到了一种创建指向整个数组的指针的方法,而不是第一个值。但是如何初始化和访问数组元素? 这是声明代码:

char (*p)[7];

当我试图释放内存时,我得到(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)错误:

delete[] p;

如何解决?我读到我需要使用'new'进行正确的初始化。但是如何用'new'初始化呢?

1 个答案:

答案 0 :(得分:1)

我不知道我是否理解你的问题。您说创建一个指向整个数组的指针,但每次在c / c ++中声明一个固定长度的数组时,该变量都指向已分配内存的开头。换句话说,变量存储数组开始的内存地址。

因此,如果您撰写char p[7],您可以通过两种不同的方式获取第三个值:p[2]*(p + 2)。但是,在这种情况下,您不能使用delete,因为该变量具有静态内存分配。

如果您想使用delete,则必须使用以下代码创建动态数组:

char *p;
p = new char[7];
// using p var
delete[] p;

另一方面,使用语句char (*p)[7]p是指向存储固定长度数组的第一个内存地址的变量的指针。这样,不能使用语句delete pdelete (*p)等删除固定内存。要在这种情况下使用delete,您必须动态分配内存我上面写的例子:

char **p, *a;
a = new char[7];
p = &a;
// use ..
delete *p;

我希望它有用:)