int main(){
int *a = new int[5];
int *b = new int[10];
int *c;
for (int i = 0; i < 5; ++i){
a[i] = i * i;
}
for (int i = 0; i < 10; ++i){
b[i] = 50;
}
c = a;
a = b;
delete[]b;
delete[]c;
return 0;
}
执行上述代码后,是否释放了最初指向的内存a
?
如果没有,如何正确释放?
指针a
需要预留给其他用途,禁止直接删除。
此代码的目的是访问最初通过a
属于b
的内存,并释放用于正确拥有的内存。
发布于 2017-03-12 20:23:08
是的,内存被释放了。但是,在更改指针所指向的内容时要非常小心,因为这很容易导致内存泄漏。
发布于 2017-03-12 20:20:17
It 是免费的。
因为在c = a;
之后,c
保存了最初指向的a
的内存地址。并且您已经通过delete [] c;
释放了c
。
// Assume originally a -> 1, b -> 2
c = a; // Now a -> 1, b -> 2, c -> 1
a = b; // Now a -> 2, b -> 2, c -> 1
您可以释放a
或b
,它们中至少有一个指向相同的内存块。您必须释放c
。
发布于 2017-03-12 20:20:35
在执行上述代码后,是否释放了最初指向的内存"a“?
是的,内存被释放了。作为c=a
,delete [] c;
清除了a
的内存。
但是,您不需要*c
来清除内存,只需直接删除a
和b
即可
delete[]a;
delete[]b;
更新
因为你已经编辑了你的答案,现在更清楚你想要实现什么了,例如,通过a
访问b
指向的内存,但在此之前,你想释放a
指向的内存。下面是你需要做的:
1-首先释放a
指向的内存
delete []a;
2-现在将a
指向b
所指向的内存位置
a=b;
现在,最初由a
指向的内存位置被清除,并且a
现在指向b
所指向的位置。
注意:请记住,现在当a
和b
都指向相同的内存位置时,如果您使用delete []a
或delete []b
,则a
和b
指向的内存位置将被清除。
https://stackoverflow.com/questions/42747264
复制相似问题