当前位置: 首页 > news >正文

长沙网站建设公司排名网站备案承诺书怎么写

长沙网站建设公司排名,网站备案承诺书怎么写,网站建设需要注意哪些内容,网站制作报价是否合法文章目录 一、动态内存函数1. malloc2. calloc3. realloc4. free 二、常见的错误1.malloc或calloc开辟的空间未检查2.越界访问3.对非malloc和calloc开辟的空间#xff0c;用free释放4.对同一块动态内存多次释放5.用free释放动态内存的一部分 三、通讯录(动态版本改写)总结 一、… 文章目录 一、动态内存函数1. malloc2. calloc3. realloc4. free 二、常见的错误1.malloc或calloc开辟的空间未检查2.越界访问3.对非malloc和calloc开辟的空间用free释放4.对同一块动态内存多次释放5.用free释放动态内存的一部分 三、通讯录(动态版本改写)总结 一、动态内存函数 要介绍动态内存函数我们就要知道动态内存函数开辟的空间在内存的什么位置。 如下图所示 动态内存函数开辟的空间在堆区该区域的空间只有free函数和程序结束才会释放。 1. malloc 函数的声明void* malloc (size_t size)包含在stdlib.h头文件中。 调用该函数可以向内存中申请大小为size个字节的连续空间并返回该空间的起始地址。 注意 如果malloc开辟空间成功则返回成功开辟好空间的起始地址如果malloc开辟空间失败则返回NULL不要开辟大小为0的空间这是标准未定义的。 因此malloc开辟空间后我们要检查返回值。 #include stdio.h #include stdlib.hint main() {int* pa (int*)malloc(sizeof(int) * 10);//开辟大小为40个字节的空间//检查是否空间开辟失败if (pa NULL){exit(-1);}free(pa);pa NULL;return 0; }2. calloc 函数的声明void* calloc (size_t num, size_t size)包含在stdlib.h头文件中。 调用该函数可以向内存中申请num个大小是size个字节的连续空间再将空间每一个字节初始化为0并返回该空间的起始地址。 calloc与malloc的唯一区别在于calloc会将空间每一个字节初始化为0。 如下所示 #include stdio.h #include stdlib.hint main() {int* arr1 (int*)malloc(sizeof(int) * 10);if (arr1 NULL){exit(-1);}for (int i 0; i 10; i){printf(%d , arr1[i]);}printf(\n);int* arr2 (int*)calloc(sizeof(int), 10);if (arr2 NULL){exit(-1);}for (int i 0; i 10; i){printf(%d , arr2[i]);}free(arr1);free(arr2);arr1 NULL;arr2 NULL;return 0; }3. realloc 函数的声明void* realloc (void* ptr, size_t size)包含在stdlib.h头文件中。 调用该函数可以调整由malloc和calloc开辟的空间大小调整为size个字节大小的空间。 但要注意其调整空间大小的方式有两种原地扩容和异地扩容。 原地扩容原地址空间后空间大小充足在原地址空间直接扩容。 异地扩容原地址空间后空间大小不够在堆区另找一片充足的空间使用。 如果调整的大小过大realloc会返回NULL。 //异地扩容 int main() {int* pa (int*)malloc(sizeof(int) * 10);if (pa NULL){exit(-1);}printf(%p\n, pa);int* tmp (int*)realloc(pa, sizeof(int) * 20);if (tmp ! NULL){pa tmp;printf(%p\n, pa);}free(pa);pa NULL;return 0; }//原地扩容 int main() {char* pa (char*)malloc(sizeof(char) * 10);if (pa NULL){exit(-1);}printf(%p\n, pa);char* tmp (char*)realloc(pa, sizeof(char) * 20);if (tmp ! NULL){pa tmp;printf(%p\n, pa);}free(pa);pa NULL;return 0; }4. free 函数的声明void free (void* ptr)包含在stdlib.h头文件中。 调用该函数可以释放由malloc和calloc开辟的空间指针变量ptr本身内容不变需要程序员本身置空。 如果ptr是NULL则函数什么事都不会做如果ptr并不是malloc和calloc开辟的空间那free函数的行为未定义 如下 int main() {int* pa (int*)malloc(sizeof(int) * 10);if (pa NULL){exit(-1);}free(pa);//释放pa所指向的空间pa NULL;//pa置NULL防止野指针return 0; }二、常见的错误 1.malloc或calloc开辟的空间未检查 有时开辟空间过大而未检查时会发生对NULL的解引用 int main() {int* pa (int*)malloc(sizeof(int) * INT_MAX);*pa 10;free(pa);pa NULL;return 0; }2.越界访问 访问超出开辟空间大小 int main() {int* pa (int*)malloc(sizeof(int) * 10);if (pa NULL){exit(-1);}for (int i 0; i 11; i){pa[i] 0;}free(pa);pa NULL;return 0; }3.对非malloc和calloc开辟的空间用free释放 free函数只能用了释放动态内存空间 int main() {int arr[10] { 0 };free(arr);return 0; }4.对同一块动态内存多次释放 动态内存空间释放一次即可 int main() {int* pa (int*)malloc(sizeof(int) * 10);if (pa NULL){exit(-1);}free(pa);free(pa);pa NULL;return 0; }5.用free释放动态内存的一部分 开辟的动态内存空间实际大小要大于我们申请的大小那多出的一部分空间要记录我们这次申请空间的信息free函数就可以根据这一部分信息来释放我们申请的空间大小。如果我们传递的指针并未指向空间首地址那么free就找不到信息来释放空间。 int main() {int* pa (int*)malloc(sizeof(int) * 10);if (pa NULL){exit(-1);}pa;free(pa);pa NULL;return 0; }三、通讯录(动态版本改写) 静态版本通讯录 相对于静态版本而言动态版本改变并不多也不难下面就是要改变的部分。 结构 //动态版本 typedef struct Contact {PeoInfo* data;int sz;//记录此时已用的大小int capacity;//记录通讯录的大小 }Contact;2.初始化InitContact #define INITSIZE 10//初始化通讯录 void InitContact(Contact* pc) {pc-sz 0;pc-capacity INITSIZE;pc-data (PeoInfo*)malloc(sizeof(PeoInfo) * INITSIZE);if (pc-data NULL){perror(malloc);return;} }扩容AddCapacity bool AddCapacity(Contact* pc) {PeoInfo* tmp realloc(pc-data, sizeof(PeoInfo) * (pc-capacity) * 2);if (tmp NULL){perror(realloc);return false;}pc-data tmp;pc-capacity * 2;return true; }//添加联系人 void AddContact(Contact* pc) {assert(pc);if (pc-sz pc-capacity){if (AddCapacity(pc) true){printf(扩容成功\n);}else{printf(扩容失败\n);return;}}printf(请输入联系人名字:);scanf(%s, pc-data[pc-sz].name);printf(请输入联系人性别:);scanf(%s, pc-data[pc-sz].sex);printf(请输入联系人年龄:);scanf(%d, (pc-data[pc-sz].age));printf(请输入联系人电话:);scanf(%s, pc-data[pc-sz].tele);printf(请输入联系人地址:);scanf(%s, pc-data[pc-sz].adder);pc-sz 1; }退出ExitContact //退出通讯录 void ExitContact(Contact* pc) {free(pc-data);pc-data NULL;pc-sz 0;pc-capacity 0; }总结 以上就是我对于动态内存管理的了解和应用。
http://www.sczhlp.com/news/194166/

相关文章:

  • 哪有做logo的网站做pc端网站报价
  • 海外海外网站建设怎么查网站后台地址
  • 2025年成都一对一培训机构优选榜:成都一对一辅导/补习/培训/补习班/辅导机构推荐,成都美博教育脱颖而出
  • 打印机共享修复,打印机无法共享,打印机修复工具下载及安装教程
  • web中静态资源加载失败的降级处理
  • 2025年保温隔热挤塑泡沫板推荐哪个厂家好?xps挤塑板/石墨聚苯板公司推荐
  • 实用指南:消息队列 MQ
  • 做网站笔记本网站右侧广告
  • asp.net电子商务网站前台模板wordpress上传附件失败
  • 房屋装修全包清单百度seo推广
  • 杭州h5模板建站重庆住房城乡建设厅网站
  • 什么是网站名淄博新闻头条最新消息
  • 家居企业网站建设讯息免费下载的网页模板
  • 网站备案现状在线设计logo软件
  • 网站建设合同要存档几年做社交电商第一步怎么做
  • 企业网站如何进行定位广告毕业设计作品网站
  • 做公司门户网站html 与wordpress
  • 包头企业网站制作网上开店教程
  • 公司做网站域名归谁成都品牌设计公司排名
  • 台州seo网站排名优化找外包公司开发app要注意什么
  • 网站没备案怎么做广告联盟网站建设项目需求
  • 上海建设厅网站门户网站好处
  • 建立网站对吗网站开发面试自我介绍
  • 企业建设网站的资金策划自主建站平台
  • 网站优化软件排名技术大型网站开发报价方案
  • 古典风格网站模版做网站技术选择
  • 自创品牌策划方案新浪 博客可以做网站优化吗
  • h5网站开发案例制作网页应该用哪个
  • 跨境电商网站怎么做wordpress 教育 主题
  • 一文读懂Optimism,Arbitrum,ZK Rollups 共识算法