这对我来说有点不清楚......所以,如果我有一个功能:
char *test(int ran){
char *ret = new char[ran];
// process...
return ret;
}
然后多次调用它:
for(int i = 0; i < 100000000; i++){
char *str = test(rand()%10000000+10000000);
// process...
// delete[] str; // do i have to delete it here?
}
所以问题是,我是否必须为每个delete[]
电话使用new[]
?
答案 0 :(得分:5)
是的,否则你会有内存泄漏。
尽管如此,分配一个功能并在另一个功能中免费并不是最好的主意。为什么不在for循环中分配并将指针传递给test
- 这会使new
和delete
保持在代码中。
答案 1 :(得分:5)
你没有拥有。但是如果你不删除你用'new'保留的内存,你最终会开始耗尽内存(内存泄漏)。
答案 2 :(得分:3)
已经给出了答案,但是当你将问题标记为C ++而不是C时,这就是你可能想用C ++做的事情(当然,可能还有其他原因没有,但是很少几率)。
vector<char> (int ran){
vector<char> ret(char);
// process...
return ret;
}
并称之为:
for(int i = 0; i < 100000000; i++){
vector<char> str = test(rand()%10000000+10000000);
// process...
}
没有新的,因此没有删除因此没有内存泄漏。
实际上,你也可能想使用std :: string而不是char *(我使用vector来给出更一般的例子)。
不要担心要复制的数据。编译器将优化它。 编辑:好吧,它可能不会优化它:)但它有很大机会。只要没有性能问题,请选择最简单的版本。