cicle中的动态内存分配 - c ++

peu*_*gas 1 c++ memory-management dynamic

在循环中动态分配内存的最佳方法是什么?

1.每个循环都没有内存吗?

int *foo;
for(int i=1;i<10;i++)
{
    foo = new int [i];
    /*
    ...
    */
    delete foo;
 }
Run Code Online (Sandbox Code Playgroud)

要么

2.到底免费记忆?

int *foo;
for(int i=1;i<10;i++)
{
    foo = new int [i];
    /*
    ...
    */
 }
 delete foo;
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 10

首先,当您使用new[]运算符时,您需要将其与delete[]运算符匹配,因此您应该这样做delete[] foo.

其次,如果delete[]在循环之后执行,则只释放分配的最后一个内存,从而导致内存泄漏.

第三,你真的需要使用原始指针吗?你不能用eg std::vector而不是吗?


efe*_*ion 5

选项1:多次分配/解除分配=性能不佳

for(int i=1;i<10;i++)
{
    foo = new int [i];
    /*
    ...
    */
    delete[] foo;
}
Run Code Online (Sandbox Code Playgroud)

选项2:多次分配/一次释放=内存泄漏

int *foo;
for(int i=1;i<10;i++)
{
    foo = new int [i];
    /*
    ...
    */
}
delete[] foo;
Run Code Online (Sandbox Code Playgroud)

选项3:如果需要动态内存,则一次分配/一次释放= OK

int *foo = new int [10];
for(int i=1;i<10;i++)
{
    /*
    ...
    */
}
delete[] foo;
Run Code Online (Sandbox Code Playgroud)

选项4:避免动态分配/解除分配

for(int i=1;i<10;i++)
{
  int foo[ i ];
    /*
    ...
    */
}
Run Code Online (Sandbox Code Playgroud)

  • 选项4不是标准C++. (4认同)