08.C语言——动态内存管理


前言


一、malloc()

void * malloc(size_t size)
向内存申请一块连续可用的空间,并返回指向这块空间的指针

开辟成功,返回一个指向开辟好空间的指针
开辟失败,返回一个NULL指针
返回值的类型是void*,使用的时候需要自己再强转

二、free()

void free(void* ptr)
释放开辟的内存

如果ptr是NULL指针,则函数什么都不做
如果ptr指向的空间不是动态开辟的,free函数的行为是未定义的

三、calloc()

void* calloc(size_t num,size_t size)

为num个size大小的元素开辟一块空间,并把空间的每个字节初始化为0

四、realloc()

void * realloc(void* ptr,size_t size)

可以做到对动态开辟内存大小的调整
ptr是要调整的地址
size是调整之后的新大小
返回值为调整之后内存起始位置
函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间

五、动态内存开辟的常见错误

1.对NULL解引用

开辟的空间失败,返回NULL,没有进行判断直接进行解引用

解决方法:对开辟空间返回的指针进行判断

int * p =(int *) malloc(100000000000);
*p=20;         出现问题
free(p);

解决方法:
if(p!=NULL){
	*p=20;
}

2.对开辟的内存空间越界访问

3.使用free()释放非动态开辟的空间

4.使用free()释放动态内存中的一部分

5.对同一块内存多次释放

6.动态开辟的空间忘记释放----内存泄漏

六、笔试题

1.

在这里插入图片描述

2.

在这里插入图片描述

3.

在这里插入图片描述

4.

在这里插入图片描述

七、柔性数组

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做“柔性数组”成员

struct S{
	int i;                                  //其他成员
	int a[0];  或者 int a[];         //柔性数组成员
};

*柔性数组成员前面必须至少有一个其他成员。
*sizeof()返回的结构大小不包括柔性数组的内存
*包含柔性数组成员的结构,用malloc()进行内存的动态分配,并且分配的内存应该大于结构大小,以适应柔性数组的预期大小

柔性数组使用

struct S{
	int i;           //其他成员
	int a[0];        //柔性数组成员
};

//期望a的大小是10个整型
struct S * ps= (struct S *) malloc(sizeof(struct S)+10*sizeof(int));
ps->i=10;
int j=10;
for(j=0;j<10;j++){
	ps->a[j]=j;
}


//增加
struct S * s=(struct S*)realloc(ps,sizeof(struct S)+20*sizeof(int));
if(s!=NULL){
	ps=s;
}

总结

内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值