如果我在 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 中返回的新数组中作为 zc 查看上面的代码 但是如果我在 main 中运行一个循环显示的内容数组,它显示了所有内容,就好像 delete in 函数不起作用但是当我在 main 中删除时,循环中没有显示任何内容所以我假设它已被删除 所以,
1)我的第一个问题是为什么删除函数不起作用?
2) 线。
char *ch2p=ch2;
这是指向另一个指针的指针吗?这是否需要删除,或者我只是删除 ch2?
感谢您的任何回复,另请注意,这段代码是我类(class)的片段,现在已经结束,所以我无法得到答案。
最佳答案
无论在何处创建新数组,都必须调用 delete。如果您将数组复制到函数中,并且之后要使用它,请考虑您必须同时访问两个数组。这是必要的,因为在删除第一个数组后,您需要知道复制数据的起始单元格。此外,指针:
字符*ch2p=ch2;
在你的例子中只是指向相同的内存数组 ch2 的第一个单元格。请注意,如果您将此指针 ch2p 作为参数传递,并且要更改或删除它,则必须将其作为双指针传递。
关于c++ - 在函数内删除分配的数组 vs 在 main 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955506/