C++ new&delete和函数

New*_*bie 3 c++ new-operator delete-operator

这对我来说有点不清楚......所以,如果我有一个功能:

char *test(int ran){
    char *ret = new char[ran];
    // process...
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

然后多次调用它:

for(int i = 0; i < 100000000; i++){
   char *str = test(rand()%10000000+10000000);
   // process...

   // delete[] str; // do i have to delete it here?
}
Run Code Online (Sandbox Code Playgroud)

所以问题是,我必须delete[]为每次new[]通话使用吗?

zil*_*n01 5

是的,否则你会有内存泄漏.

但是,分配在一个函数中并在另一个函数中释放并不是最好的主意.为什么在未分配的循环和传递指针test-这保持newdelete代码在一起.

  • 这样做完全没问题,而且非常普遍. (3认同)
  • @Neil很多东西都很好,但仍然不是一个好主意.:) (3认同)

Why*_*eEx 5

你不具备对.但是如果你不删除你用'new'保留的内存,你最终会开始耗尽内存(内存泄漏).