new与malloc

指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。

                                                                                      ——C++ Primer Plus

 

malloc与new实现了程序在运行时动态分配内存,分配的内存块位于堆(heap)或自由存储区。

malloc与new的区别

  1. malloc是C/C++的库函数,与库函数free配对使用,而new是C++中的运算符,可以被重载,与delete配对使用。一个是库函数,一个是运算符。
  2. malloc使用方式为:void*malloc(unsigned int num_bytes),分配num_bytes字节大小的内存,返回类型为void*,即未确定类型的指针,即分配了内存,但不知道这段内存到底会被用来存什么类型的数据,一般会采用强制类型转换如int* p=(int*)malloc(10*sizeof(int));free(a);  采用new运算符时,无需指定内存大小,编译器会自动计算应该分配多大的内存,返回类型为完整类型指针,即返回类型与对     象完全匹配,如果申请空间失败则会返回nullptr,而malloc返回失败返回0。
  3. new是运算符,可以被重载;malloc与free虽然是函数,但不能被重载。
  4. malloc分配的内存块,如果在使用过程中发现内存不足,可以采用realloc重新分配;而new运算符没有这样的扩展内存的机制
  5. new与delete可以基于malloc与free实现;反之不成立。

 

newdelete使用时的注意事项:

  1. new 与delete要配对使用,不然会发生内存泄漏。
  2. delete是释放指针所指向的内存,而不会删除指针变量本身。
  3. new和delete可以实现在一个函数中分配的内存,而在另一个函数中释放。
  4. 在使用这种指针指向的数组时,只需把指针当做数组名就可以了。
  5. 不要尝试释放已经释放的内存块;对空指针使用delete是安全的
  6. 用new分配的动态数组,应用delete []来释放
  7. new分配的内存块是从堆(heap)或自由存储区的内存区域分配,而常规变量分配的内存块在被称作栈(stack)的内存区域中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值