C ++从指针中删除内存

时间:2013-08-25 19:43:37

标签: c++ pointers memory

我对此代码有疑问:

void main() 
{
int *num = (int*)malloc(sizeof(int) * 10); /XXX
for (int i = 0; i < 10; i++)
    num[i] = i;

int *num2 = (int*)malloc(sizeof(int) * 10);
for (int i = 0; i < 10; i++)
    num2[i] = i + 10;

num = num2;
}

当我将第一个指针指向第二个时,是否删除了XXX行中的内存?

1 个答案:

答案 0 :(得分:5)

如果你想使用C ++,你应该使用new int[10] [1] ......你的问题的答案是“不,它没有删除,你有内存泄漏”。

您需要使用:

free(num); 
num = num2;

你当然也应该在某个时候释放num的“新”值。

[1]或者更好的是,使用vector<int> num(10); - 完全避免代码中的动态内存分配。例如。以下代码将处理已分配的内存:

vector<int> num(10);
vector<int> num2(10);
// ... Do something with num & num2 values.
num2 = num;

如果num2持有不同数量的值,这甚至会起作用;其大小已调整为与num匹配。通过手动malloc来电,很难做到这一点。