在main和main中删除已分配的数组

时间:2013-06-06 06:50:48

标签: c++ function-pointers

如果我在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?

感谢您的任何回复,同时请注意此代码是我班级的片段,现在已经结束,所以我无法得到答案。

2 个答案:

答案 0 :(得分:2)

在创建新阵列的任何地方,都必须调用delete。如果您将数组复制到一个函数中,并且您将在此之后使用它,请考虑到您必须同时访问这两个数组。这是必要的,因为您需要在第一个数组的delition之后知道复制数据的起始单元格。而且,指针:

char * ch2p = ch2;

在你的情况下指向相同的内存,即数组ch2的第一个单元格。请注意,如果您将此指针ch2p作为参数传递,并且要更改或删除它,则必须将其作为双指针传递。

答案 1 :(得分:0)

您无需在ch2p上调用delete。它只是一个指针,指向在ch2上调用new时创建的已分配内存。

在调用delete之后能够访问数组...这是正常的。你仍然有内存WAS找到的地址,并且所有删除​​操作都将内存释放到堆中。如果没有任何要求,内容将保持不变。