当前位置: 首页 > news >正文 对网站建设的认识个人装修设计软件 news 2025/11/1 15:42:40 对网站建设的认识,个人装修设计软件,分销系统网站,建设局网站投诉目录1.为什么要动态内存分配2.动态内存函数malloc](https://cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和[freecallocrealloc3.使用动态内存要注意的几点对NULL的解引用对同一块动态内存多次释放free非动态开辟的内存使用free释放一块动态开辟内存的一部分一个函数中… 目录1.为什么要动态内存分配2.动态内存函数malloc](https://cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和[freecallocrealloc3.使用动态内存要注意的几点对NULL的解引用对同一块动态内存多次释放free非动态开辟的内存使用free释放一块动态开辟内存的一部分一个函数中开辟动态空间传到其他函数中同样需要free4.例题例题1例题21.为什么要动态内存分配 计算机的内存粗略得可以分为栈区、堆区、静态区 我们之前学到的内存开辟是定义一个变量或定义一个数组 int num 10; int arr[10] {0};上述都是在栈区上开辟的空间这样开辟的空间有两个特点 1.空间开辟大小是固定的 2.数组在定义时在VS环境中C99的规定下必须指定数组长度并且数组长度必须是常量不可以是变量 对于空间的需求如果我们知道要开辟空间的大小那么可以用上述的开辟方式 但是有时候我们需要的空间大小在程序运行的时候才能知道那数组的编译时开辟空间的方式就不能满足了这就需要用动态内存开辟了 2.动态内存函数 C语言中有一些动态开辟的库函数这些函数都声明在stdlib.h头文件中 并且这些函数是在内存中的堆区开辟的空间 malloc和free void* malloc (size_t size);这个函数向内存中申请一块连续可用的空间并且返回指向这块空间的指针如果开辟失败返回一个NULL指针所以在malloc后要检查返回值因为函数不知道开辟的空间是什么类型所以在函数设计时就设计返回一个void*指针返回值类型是void*在使用时由使用者决定所以要把返回的指针进行强制类型转化成其他类型的指针如果参数size为0malloc的行为是C语言中未规定的取决于编译器 下面我们开辟一个存放int类型的空间 #include stdio.h #include stdlib.h #includestring.h #includeerrno.hint main() {int* arr NULL;arr (int*)malloc(40);//检测是否malloc成功if (arr NULL){strerror(errno);return 1;} } 开辟出的是连续的空间所以与数组类似我们可以通过下标访问空间 #include stdio.h #include stdlib.h #includestring.h #includeerrno.hint main() {int* arr NULL;arr (int*)malloc(40);//检测是否malloc成功if (arr NULL){strerror(errno);return 1;}int i 0;for(i0; inum; i){*(arri) 0;//arr[i] 0;通过下标访问} } C语言中提供了另一个free函数专门是用来动态内存的释放和回收 void free (void* ptr);free函数是专门用来释放动态开辟的内存ptr指向动态开辟的空间。如果参数 ptr 指向的空间不是动态开辟的那free函数的行为是未定义的。如果参数 ptr是NULL指针则函数什么事都不做。free掉空间后还要把ptr置为空 int main() {int* arr NULL;arr (int*)malloc(40);//检测是否malloc成功if (arr NULL){strerror(errno);return 1;}int i 0;for(i0; inum; i){*(arri) 0;//arr[i] 0;通过下标访问}free(arr);//释放ptr所指向的动态内存arr NULL;return 0; }calloc 函数原型 void* calloc (size_t num, size_t size);该函数的功能是开辟num个大小为size的元素开辟一块空间该数会把开辟出的空间每个字节初始化为0其他与malloc用法相同 int main() {int *p (int*)calloc(10,sizeof(int));//检测是否calloc成功if (arr NULL){strerror(errno);return 1;}int i 0;for(i0; inum; i){*(arri) 0;//arr[i] 0;通过下标访问}free(arr);//释放ptr所指向的动态内存arr NULL;return 0; }realloc realloc函数使动态内存管理更加灵活 有时我们发现之前申请的动态空间太小了或者太大了为了得到合理大小的内存我们就要用到realloc函数对内存大小进行 函数原型 void* realloc (void* ptr, size_t size);ptr是要调整的内存地址size是调整后的大小返回值是调整之后的内存起始位置这个函数调整原内存空间大小的基础上还会将原来内存中的数据移动到新的空间。realloc开辟出的新空间不会初始化要用一个新的指针去接收realloc调整后的地址因为如果用旧的指针去维护它如果扩容失败返回NULL不但扩容失败了原空间中的数据也丢失了 realloc调整内存空间有2种情况 情况一原有空间后有足够大的空间进行扩容 要扩展内存就直接在原有内存之后直接追加空间原来空间的数据不发生变化 情况2原有空间之后没有足够大的空间进行扩容 在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 原内存空间中的内容也会拷贝到新的空间上 int main() {int* p (int*)malloc(5 * sizeof(int));if (p NULL){perror(malloc);return 1;} int* ptr (int*)realloc(p, 10 * sizeof(int));if (ptr ! NULL){p ptr;//realloc成功就把新地址的值赋给旧地址还是让旧指针维护这个空间}//realloc在开辟空间后不会进行初始化free(p);p NULL;return 0; }3.使用动态内存要注意的几点 对NULL的解引用 void test() {int *p (int *)malloc(INT_MAX/4);*p 20;//如果p的值是NULL就会有问题free(p); }对同一块动态内存多次释放 void test() {int *p (int *)malloc(100);free(p);free(p);//重复释放 }free非动态开辟的内存 void test() {int a 10;int *p a;free(p);//不可以free掉动态开辟的内存 }使用free释放一块动态开辟内存的一部分 void test() {int *p (int *)malloc(100);p;free(p);//p不再指向动态内存的起始位置 }一个函数中开辟动态空间传到其他函数中同样需要free #include stdio.h #include stdlib.hint* getmem() {int* p (int*)malloc(40);return p; } int main() {int* arr getmem();free(arr);//需要free掉通过函数传来的动态内存arr NULL;return 0; }4.例题 例题1 以下代码有什么错误 void GetMemory(char *p) {p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, hello world);printf(str); }*1. str传给pp是str的临时拷贝有自己独立的空间在p中进行动态内存开辟但是str仍为空strcpy拷贝时非法访问内存 * 2.在GetMemory中开辟了动态内存但是并没有free释放掉所以会内存泄漏 想要解决这个问题改变指针的指向就要用到二级指针 void GetMemory(char **p) {*p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, hello world);printf(str); }例题2 char *GetMemory(void) {char p[] hello world;return p; } void Test(void) {char *str NULL;str GetMemory();printf(str); }上面的代码也有问题GetMemory函数中定义了一个字符串并且返回字符串首字符地址主函数中用str接收但是出了GetMemory后在GetMemory中定义的局部变量会自动销毁所以str还是一个空指针 像这种问题都叫做返回栈空间地址的问题 文章转载自: http://www.morning.spsqr.cn.gov.cn.spsqr.cn http://www.morning.znnsk.cn.gov.cn.znnsk.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.kfldw.cn.gov.cn.kfldw.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.qggm.cn.gov.cn.qggm.cn http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn http://www.morning.nkyc.cn.gov.cn.nkyc.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.mtxrq.cn.gov.cn.mtxrq.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.wmqxt.cn.gov.cn.wmqxt.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.thlr.cn.gov.cn.thlr.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.tlnbg.cn.gov.cn.tlnbg.cn http://www.morning.bkppb.cn.gov.cn.bkppb.cn http://www.morning.mjwnc.cn.gov.cn.mjwnc.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.hxlch.cn.gov.cn.hxlch.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.yrpd.cn.gov.cn.yrpd.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.pdkht.cn.gov.cn.pdkht.cn http://www.morning.yqpzl.cn.gov.cn.yqpzl.cn http://www.morning.sdhmn.cn.gov.cn.sdhmn.cn http://www.morning.wrkhf.cn.gov.cn.wrkhf.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.rdkqt.cn.gov.cn.rdkqt.cn http://www.morning.qzglh.cn.gov.cn.qzglh.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.snkry.cn.gov.cn.snkry.cn http://www.morning.mjzcp.cn.gov.cn.mjzcp.cn http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.qcygd.cn.gov.cn.qcygd.cn http://www.morning.yjdql.cn.gov.cn.yjdql.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.nkpml.cn.gov.cn.nkpml.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.jzykq.cn.gov.cn.jzykq.cn http://www.morning.dfygx.cn.gov.cn.dfygx.cn http://www.morning.rpfpx.cn.gov.cn.rpfpx.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.ycgrl.cn.gov.cn.ycgrl.cn http://www.morning.lmhcy.cn.gov.cn.lmhcy.cn http://www.morning.zpyh.cn.gov.cn.zpyh.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.fmkjx.cn.gov.cn.fmkjx.cn http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn http://www.morning.kxwsn.cn.gov.cn.kxwsn.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.tbqxh.cn.gov.cn.tbqxh.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.wbns.cn.gov.cn.wbns.cn http://www.morning.nxrgl.cn.gov.cn.nxrgl.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.lrflh.cn.gov.cn.lrflh.cn 查看全文 http://www.tj-hxxt.cn/news/268406.html 相关文章: 常德举报网站wordpress 文章 数据库 专业外包网站建设公司排名网站地图格式 婚恋网站女生要求男生要一起做淘宝百度搜索链接 西宁网站建设天锐科技各大网站怎么把世界杯做头条 门户网站后台做ppt的图片网站有哪些 网站建设进度表 下载有哪些中文域名网站有哪些 有学做衣服的网站吗科技成果 电商网站目录优化遵义市建设局网站 宁夏网站建设价格网页设计入门与应用 如何建设网站步骤苏州网站建设系统哪家好 网站开发可以开发哪些做网站最专业的公司 邳州网站开发正规手表回收网站 教你做cpa单页网站x3型虚拟主机 wordpress php网站模板带后台怎么做垂直门户网站 在马来西亚做网站网站合法吗单页网站建设平台哪个好 什么样的网站好优化可以做本地生活服务的有哪些网站 医保局网站建设中标公告用什么语言能写网站吗 免费网站建设apk郑州市建设集团 滨城网站开发自己公司产品网站的好处 自助网站制作系统源码seo如何优化一个网站 网站建设 成本分析ui设计一般要学多久 建立网站需要钱吗网站建设服务属于信息技术服务吗 小孩子做手工做游戏的网站用WordPress配置cms 长兴建设局网站青海seo关键词排名优化工具 网站页面如何设计图哪个网站做货车专业 网站建设岗位将来有什么发展产品设计平台有哪些 成都洛可可设计有限公司黑帽seo技术论坛 企业网站规划要求卖东西的网站模板免费下载 个人企业网站做网站一般什么价格 北京神州网站建设wordpress 标题栏 居中