C ++指针简单的问题

时间:2010-04-30 14:58:40

标签: c++ memory pointers memory-leaks

如果我在循环中有以下行:

Type *unite = new Type(newSize); 

double *array= new double[anySize];

如果我内部没有删除操作符,那么内存关注的行为是什么?它会不断地在不同的内存位置上分配对象和数组,从而导致内存泄漏吗?

3 个答案:

答案 0 :(得分:12)

是的,它会。这样:

for (int i = 0; i < 10; ++i) 
{
  Type* unite = new Type(newSize);
}

将分配10个Type类型的对象,所有这些对象都位于不同的位置。它们都不会被释放,最后你将不会指向任何一个。您将泄漏10 * sizeof(Type)个字节的内存。

同样,这个

for (int i = 0; i < 10; ++i) 
{
  double *array= new double[anySize];
}
出于同样的原因,

会泄漏10 * anySize * sizeof(double)字节的内存。

答案 1 :(得分:1)

会不断在不同的内存位置分配对象和数组,从而导致内存泄漏?

假设你是这个意思:

 for (;x;x)
 {
    double *ptr = new double[42];
 }

然后答案是肯定的,记忆被泄露了。

答案 2 :(得分:1)

是。您将在循环的每次迭代中泄漏内存。 boost::scoped_ptrboost::scoped_array用于处理此类情况。