如果我在main
中声明一个已分配的指针char *ch2=new char[10*17];
char *ch2p=ch2;
while(infile.get(*ch2))
{
cout<<*ch2;
ch2++;
}
.................................
char *zc=rc.sortArray(ch2p,10,17);
在函数内部,我将数组复制到一个新的,返回到主
T* a_ray = new T[(10*17)];
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
a_ray[i*cols+j] = arry[i*cols+j];
}
}
现在我的问题是,我将其添加到函数中,
delete [] arry; // delete old array
所以我可以删除在main中创建的数组,将其复制到main中返回的数组,因为zc 查看上面的代码但是如果我在main中运行一个循环显示内容数组,它显示所有的内容,好像删除功能不起作用,但当我在主要删除时没有显示在循环所以我认为它被删除 所以,
1)我的第一个问题是为什么删除功能不起作用?
2)该行。
char *ch2p=ch2;
这是指向另一个指针的指针吗?这是否需要删除或者我是否删除了ch2?
感谢您的任何回复,同时请注意此代码是我班级的片段,现在已经结束,所以我无法得到答案。
答案 0 :(得分:2)
在创建新阵列的任何地方,都必须调用delete。如果您将数组复制到一个函数中,并且您将在此之后使用它,请考虑到您必须同时访问这两个数组。这是必要的,因为您需要在第一个数组的delition之后知道复制数据的起始单元格。而且,指针:
char * ch2p = ch2;
在你的情况下指向相同的内存,即数组ch2的第一个单元格。请注意,如果您将此指针ch2p作为参数传递,并且要更改或删除它,则必须将其作为双指针传递。
答案 1 :(得分:0)
您无需在ch2p上调用delete。它只是一个指针,指向在ch2上调用new时创建的已分配内存。
在调用delete之后能够访问数组...这是正常的。你仍然有内存WAS找到的地址,并且所有删除操作都将内存释放到堆中。如果没有任何要求,内容将保持不变。