2010-04-30 71 views
0

如果我在循环中有下面几行:C++指针简单的问题

Type *unite = new Type(newSize); 

double *array= new double[anySize]; 

什么是什么顾虑内存,如果我没有删除里面的运营商的行为它?它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?

回答

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)字节的内存。

+0

只是一个小细节,但不应该有一些恒定的空间开销的阵列分配,如'10 * anySize * sizeof(double)+ c'? – 2010-04-30 15:12:56

+0

为了存储数组的大小信息,并不要求实现过度分配。例如,数组大小数据可能存储在某个表中,无论分配是否发生,都会存在。所以虽然你说得对,也会有一些开销也被泄露,但是不可能量化多少(甚至像'+ c'这样的普遍性,因为这意味着开销通过分配增加'O(n)' ,这不一定是真实的)以适用于所有实现的方式。 – 2010-04-30 16:53:51

1

它会不断地在不同的内存位置分配对象和数组,因此内存泄漏?

假设你的意思是这样的:

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

那么答案是肯定的,内存泄漏。