动态内存开辟 初学

本文介绍了C++中动态内存管理的基础知识,包括使用malloc进行堆区空间的开辟,calloc用于初始化为0的内存分配,realloc调整已分配内存的大小,以及free函数进行内存释放。强调了内存泄漏的危害和柔性数组在C99标准中的应用。

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

动态开辟内存空间的方法: malloc calloc realloc

malloc 在堆区开辟指定大小空间 ,返回空类型指针

开辟方法 : int*p=(int*)malloc(n); 开辟n个字节大小的空间,强制转换为int*类型,传给p。

calloc在堆区开辟指定大小空间,并且将空间内各个字节初始化为0

开辟方法: int* p=(int*)calloc(n,size) 开辟n个字节大小为size的空间大小(类似于数组),强制转换为int*类型传给p;

realloc改变堆区的动态内存空间大小;

开辟方法: realloc(arr,size) 即将arr指向的空间重新开辟为大小为size的空间;

在开辟过程中,如果内存之间的内存间隙不够,则会更换起始地址,重新寻址开辟新空间,如果开辟失败返回空地址,开辟成功返回 起始地址; 注: realloc(NULL,size) 当realloc接受到一块空地址,相当于malloc开辟一块新空间;

freep); p=NULL

在动态内存空间使用完毕的时候需要释放,不然会导致堆区内存空间挤压,内存碎片多,内存使用效率低。

并且如果在外部函数创建了动态内存,且未得到释放,当外部函数结束,且指针被销毁,导致无法找到动态内存,那么开辟的动态内
存将会发生内存泄露,无法被销毁;

柔性数组

在C99标准中,结构体的最后一个成员(最少两个成员)可以是大小未知的数组; 而这个数组可以采用动态内存开辟的方式创建

例子: struct S{int a; int arr[]/int arr[0] ; };

struct S* s= (struct S*) malloc( sizeof(struct S) + sizeof(int)*n )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值