gpt4 book ai didi

c++ - 在函数内删除分配的数组 vs 在 main 中

转载 作者:行者123 更新时间:2023-11-28 03:15:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com