我对此代码有疑问:
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行中的内存?
答案 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
来电,很难做到这一点。