观侯捷老师new和delete以及malloc在vc当中调试模式和运行下分配内存

本文探讨了C++中动态内存分配的区别,包括new、delete与malloc的使用。强调了内存泄漏问题,解释了在函数作用域内使用new时必须配合delete以避免内存泄漏。同时,分析了调试模式下,new操作在内存分配中额外的Debug header和cookie信息,以及在不同模式下的内存对齐策略。最后,提到了new运算符用于数组时的注意事项,指出不使用delete[]可能导致的内存泄漏风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在讲到new和delete不得不想到c语言中的malloc and free 以及其经常用于动态内存分配,而简单来说,动态内存分配在堆中,不会因为离开作用域而删除,而栈中存储的一般为函数参数,返回值以及作用域下的local orient.

那我们可想而知的是,在函数中如果我创建指针,肯定为了不浪费内存,我们选择动态分配内存的方式,那么就是利用C++中的new或者c中的malloc,我们需要养成一个良好的习惯就是记得释放内存不然会造成memory leak,想必大家经常听过这个词,那这里是为什么会造成内存泄漏,假设我们在一个作用域比如

{
    char* p = new char[3];
}

此时我们创建了一个指向char型的指针p,但是p没有delete,这时候,一块在heap中创建的char数组依旧存在,而这个地址的别名p因为离开了作用域而无法访问,那么这块内存在整个操作系统中就是无法使用的部分。

所以在内存中,我们使用了new就得伴随着delete。

这时候我们知道p是一个local orient,那么我们还会有一种写法就是static,也就是静态对象或者说全局对象,这种对象在离开作用域时,是不会消失的,他会伴随着程序结束而终结。

{
    static int a = 3;
}
那么说到这里,我们也会去想知道new到底是怎么工作的,从我的上一篇博客里,我们知道创建一个complex对象需要2个double也就是8个字节,这时候比如有下列的程序

                
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值