0

如果我在 main 中声明一个分配的指针

char *ch2=new char[10*17]; 
char *ch2p=ch2; 
while(infile.get(*ch2))
{
cout<<*ch2;
ch2++;
}
.................................
char *zc=rc.sortArray(ch2p,10,17);

在函数内部,我将数组复制到一个新的数组中,该数组返回给 main

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 中删除时,循环中没有显示任何内容,所以我认为它已被删除

1)我的第一个问题是为什么删除功能不起作用?

2)线路。

char *ch2p=ch2; 

这是指向另一个指针的指针吗?这需要删除还是我只删除ch2?

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

4

2 回答 2

2

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

字符 *ch2p=ch2;

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

于 2013-06-06T07:01:15.447 回答
0

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

在调用删除后能够访问数组方面......这是正常的。您仍然拥有找到内存的地址,并且所有删除​​操作都是将该内存释放到堆中。如果没有任何东西可以要求它,则内容将保持不变。

于 2013-06-06T07:01:03.003 回答