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行中的内存?
如果你想使用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调用很难做到这一点.