c 根据输入动态分配数组大小_c++动态分配浅析

本文详细介绍了C和C++中的动态内存分配与释放,包括malloc/free、new/delete、new[]/delete[]的使用及底层实现。同时讨论了new失败的处理方式、delete失败的原因以及placement new的应用。
摘要由CSDN通过智能技术生成

1. c语言中动态分配和释放

在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配内存使用的是系统调用,使用它们必须包含stdlib.h,才能编译通过。

malloc后需要检查内存是否分配成功,free则要在指针不为空的情况下才能进行。

示例代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    
 char *p = (char*)malloc(10);
 if ( p == NULL)
 {
    
  printf("errorn");
 }
 strncpy(p, "23456", sizeof(p)-1);
 printf("p=%sn", p);
 if ( p != NULL)
 {
    
  free(p);
  p = NULL;
 }
 return 0;
}

2. c++动态分配和释放

c++中,申请动态内存是使用new和delete,这两个关键字实际上是运算符,并不是函数。

需要注意的是:new的不是数组的话,则直接delete就好,并且只会调用一次析构函数,而new[]的话,则需使用delete[]来释放,并且数组中每一个元素都会调用一次析构函数,调用完析构函数再释放内存。

3. new/delete的底层实现

对于基本数据类型(无需构造函数)而言new是重载了new运算符&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值