首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++如何正确释放内存?

C++如何正确释放内存?
EN

Stack Overflow用户
提问于 2017-03-12 20:17:30
回答 6查看 8K关注 0票数 3
代码语言:javascript
运行
复制
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

如果没有,如何正确释放?

代码语言:javascript
运行
复制

指针a需要预留给其他用途,禁止直接删除。

此代码的目的是访问最初通过a属于b的内存,并释放用于正确拥有的内存。

EN

回答 6

Stack Overflow用户

发布于 2017-03-12 20:23:08

是的,内存被释放了。但是,在更改指针所指向的内容时要非常小心,因为这很容易导致内存泄漏。

票数 2
EN

Stack Overflow用户

发布于 2017-03-12 20:20:17

It 是免费的

因为在c = a;之后,c保存了最初指向的a的内存地址。并且您已经通过delete [] c;释放了c

代码语言:javascript
运行
复制
// Assume originally a -> 1, b -> 2

c = a;  // Now a -> 1, b -> 2, c -> 1
a = b;  // Now a -> 2, b -> 2, c -> 1

您可以释放ab,它们中至少有一个指向相同的内存块。您必须释放c

票数 1
EN

Stack Overflow用户

发布于 2017-03-12 20:20:35

在执行上述代码后,是否释放了最初指向的内存"a“?

是的,内存被释放了。作为c=adelete [] c;清除了a的内存。

但是,您不需要*c来清除内存,只需直接删除ab即可

代码语言:javascript
运行
复制
delete[]a;
delete[]b;

更新

因为你已经编辑了你的答案,现在更清楚你想要实现什么了,例如,通过a访问b指向的内存,但在此之前,你想释放a指向的内存。下面是你需要做的:

1-首先释放a指向的内存

代码语言:javascript
运行
复制
delete []a;

2-现在将a指向b所指向的内存位置

代码语言:javascript
运行
复制
a=b;

现在,最初由a指向的内存位置被清除,并且a现在指向b所指向的位置。

注意:请记住,现在当ab都指向相同的内存位置时,如果您使用delete []adelete []b,则ab指向的内存位置将被清除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42747264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档