C++从指针中删除内存

use*_*928 -2 c++ memory pointers

我对这段代码有疑问:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*son 5

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

你需要使用:

free(num); 
num = num2;
Run Code Online (Sandbox Code Playgroud)

当然,你也应该num在某些时候释放"新"价值.

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

vector<int> num(10);
vector<int> num2(10);
// ... Do something with num & num2 values.
num2 = num;
Run Code Online (Sandbox Code Playgroud)

如果num2持有不同数量的值,这甚至可以工作; 它的大小调整为匹配num.通过手动malloc调用很难做到这一点.