在其中一个论坛上,我找到了一种创建指向整个数组的指针的方法,而不是第一个值。但是如何初始化和访问数组元素? 这是声明代码:
char (*p)[7];
当我试图释放内存时,我得到(_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)错误:
delete[] p;
如何解决?我读到我需要使用'new'进行正确的初始化。但是如何用'new'初始化呢?
答案 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 p
,delete (*p)
等删除固定内存。要在这种情况下使用delete,您必须动态分配内存我上面写的例子:
char **p, *a;
a = new char[7];
p = &a;
// use ..
delete *p;
我希望它有用:)