-2

I got a question about this code:

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;
}

Is the memory in the XXX line deleted when I equal the first pointer to the second?

4

1 回答 1

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如果持有不同数量的值,这甚至会起作用;它的大小被调整以匹配nummalloc手动调用更难做到这一点。

于 2013-08-25T19:46:29.817 回答