【发布时间】:2010-04-30 14:58:39
【问题描述】:
如果我在循环中有以下几行:
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
如果我的内存中没有删除操作符,那么与内存有关的行为是什么?它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?
【问题讨论】:
标签: c++ memory pointers memory-leaks
如果我在循环中有以下几行:
Type *unite = new Type(newSize);
或
double *array= new double[anySize];
如果我的内存中没有删除操作符,那么与内存有关的行为是什么?它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?
【问题讨论】:
标签: c++ memory pointers memory-leaks
是的,它会的。这个:
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)字节的内存。
【讨论】:
10 * anySize * sizeof(double) + c?
+ c 这样一般的说法,因为这意味着开销随着分配而增长O(n),这是'不一定正确)以适用于所有实现的方式。
它会不断地在不同的内存位置分配对象和数组,从而导致内存泄漏?
假设你的意思是:
for (;x;x)
{
double *ptr = new double[42];
}
那么答案是肯定的,内存泄露了。
【讨论】:
是的。您将在循环的每次迭代中泄漏内存。 boost::scoped_ptr 和 boost::scoped_array 就是为了处理这种情况而设计的。
【讨论】: