这是一个简单的问题,我是初学者,但我想确认一下。
假设我有一个类对象int * data,它指向一个包含5个int的数组。假设我有一个用5个参数替换数据的函数,如下所示。
void replaceData(int a, int b, int c, int d, int e){
int * temp = new int[5];
temp[0] = a;
temp[1] = b;
temp[2] = c;
temp[3] = d;
temp[4] = e;
data = temp;
}
我担心这会导致内存泄漏,因为如果数据已经有5个整数,那么它们仍然会浮动。我很想通过以下方式改变它以避免这种情况:
void replaceData(int a, int b, int c, int d, int e){
int * temp = new int[5];
temp[0] = a;
temp[1] = b;
temp[2] = c;
temp[3] = d;
temp[4] = e;
delete data; //would this prevent a memory leak?
data = temp;
temp = 0;
}
非常感谢您的投入!
答案 0 :(得分:2)
如果data
的分配方式与分配temp
的方式相同,那么您需要在修改指针之前先释放旧数组 - 否则会导致内存泄漏。< / p>
请注意,如果您分配一个数组(new int[5]
),那么您必须释放这样的数组:
delete[] data;
此外,最好使用像std::vector
这样的STL容器,而不是手动分配数组,因为所有的内存管理都是为你处理的。
答案 1 :(得分:1)
几乎。
delete
运算符用于指向单个对象。您需要执行delete[] data
才能使用此功能。在末尾将临时指针归零并没有什么区别。
答案 2 :(得分:0)
如果代码是delete[]
而不是delete
,则代码是正确的。如果大小是硬编码的,那么使用动态分配的数组是没有意义的(至少在这种情况下不是这样)。只需使用int temp[5];
。
更好的是,只需使用矢量。然后,这是对std::swap
的简单调用。