动态内存(进阶四)

realloc

malloc与calloc只不过calloc在开辟空间的同时,还会将空间上的数字赋值为0
重点介绍一下realloc

void* realloc (void* ptr, size_t size);

ptr 是要调整的内存地址
size 调整之后新大小
返回值为调整之后的内存起始位置。
这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到 新 的空间。
realloc在调整内存空间的是存在两种情况:
情况1:原有空间之后有足够大的空间
情况2:原有空间之后没有足够大的空间
在这里插入图片描述

free的理解

1,free(p)只是使系统对该空间进行回收,并不是销毁空间,该空间还是存在的。
2,free(NULL)是没有问题的,因为NULL没有指向有效空间
3,free只能用于动态开辟的空间,不能对栈区上的空间进行释放
4,一块空间不能多次释放,假设你释放一次后系统又再一次使用它,当你再次释放的时候,就会破坏其他有效的空间
5,free后一定要将指针设为NULL

柔性数组

主要是当需要结构体中使用可以动态增长的数组时

struct A
{
	int a;
	int arr[0];
	//或者int arr[];

};

柔性数组可以相当于可以动态增长的数组但是在使用时又有些不同

柔性数组的特点

结构中的柔性数组成员前面必须至少一个其他成员。
sizeof 返回的这种结构大小不包括柔性数组的内存。
包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小
在这里插入图片描述

其实从功能上看,我们单独将数组动态开辟也未尝不可
也可以这样

A* p = (A*)malloc(sizeof(struct A) );
	p->a = (int*)malloc(sizeof(int) * 100);

这样同样是在为数组开辟100*4个字节的空间,但是这样做的话在后续内存的释放会比较麻烦,后者要比前者多释放一次空间,当用户在使用我们的函数时候,并不知道做了二次内存分配,用户可能只会释放一次内存,那么就会造成内存泄露,所以我们将结构体的内存及其成员内存一次性分配好,并且返回一个指针的话,用户使用时只需要做一次free就可以了。
同时连续的内存有利于提高访问速度,也有益于减少内存碎片。
(因为所分配的空间时不连续的,而数组占用的时连续空间)

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天少点debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值