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

标签 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);

在函数内部,我将数组复制到一个返回给 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/

相关文章:

c++ - C++中的foreach算法

c - 如何将函数指针作为 const 返回?

c++ - Qt 容器中如何添加 noname 栈数据?

C++ 监视变量的更改值

指向全局函数的 C++ 类成员指针

C++无效引用问题

c - 需要帮助优化函数调用

c++ - 函数指针基础问题

c++ - QGraphicsView 可能的错误?

c++ - float 转换 C++