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

免费网站的资源可以发公众号吗广告代理商是什么

免费网站的资源可以发公众号吗,广告代理商是什么,中国菲律宾海牙法庭,网站文案标准格式目录 1. 为什么要有动态内存分配2. malloc和freemallocfree 3. calloc和realloccallocrealloc 4. 常见的动态内存的错误对NULL直接的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存… 目录 1. 为什么要有动态内存分配2. malloc和freemallocfree 3. calloc和realloccallocrealloc 4. 常见的动态内存的错误对NULL直接的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释放内存泄露 5. 动态内存经典笔试题分析题目1题目2题目3题目4 6. 柔性数组柔性数组的特点柔性数组的使用 7. 总结C/C中内存区域划分 1. 为什么要有动态内存分配 我们已经掌握的内存开辟方式有 int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的方式有两个特点 空间开辟大小是固定的数组在声明的时候必须指定数组的长度数组空间一旦确定了大小就不能调整 但是对于空间的需求不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道那数组的编译时开辟空间的方式就不能满足了 C语言引入了动态内存开辟让程序员自己可以申请和释放空间就比较灵活了 2. malloc和free malloc C语言提供了一个动态内存开辟的函数 void* malloc (size_t szie); 这个函数向内存申请一块连续可用的空间并返回指向这块空间的指针 如果开辟成功则返回一个指向开辟好空间的指针如果开辟失败则返回一个NULL指针因此malloc的返回值一定要做检查返回值的类型是void*,所以malloc函数并不知道开辟空间的类型具体在使用的时候使用者自己来决定如果参数size为0malloc的行为是标准是未定义的取决于编译器 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #includestdlib.hint main() {int* p (int*)malloc(40);if (p NULL){perror(malloc);return 1;}int i 0;for (i 0; i 10; i){*(p i) i;}for (i 0; i 10; i){printf(%d , *(p i));}//释放空间free(p);p NULL;return 0; }malloc只知道申请多大的空间但是不知道会放什么类型的数据所以malloc函数就只能返回void* free C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的函数原型如下 void free (void* ptr); free函数用来释放动态开辟的内存 如果参数ptr指向的空间不是动态开辟的那free函数的行为是未定义的如果参数ptr是NULL指针则函数什么事都不做 malloc和free都声明在stdlib.h头文件中 3. calloc和realloc calloc C语言还提供了一个函数叫calloc,calloc函数也用来动态内存分配。原型如下 void * calloc (size_t num , szie_t size); 函数的功能是为num个大小为size的元素开辟一块空间并且把空间的每个字节初始化为0.与函数malloc的区别只在于calloc会在返回地址之前把申请的空间的每个字节初始化全0 int main() {int* p (int*)calloc(10, sizeof(int));if (p NULL){perror(malloc);return 1;}int i 0;for (i 0; i 10; i){printf(%d , *(p i));}//释放空间free(p);p NULL;return 0; }所以如果我们对申请的内存空间的内容要求初始化那么可以很方便的使用calloc函数来完成任务 realloc realloc函数的出现让动态内存管理更加灵活时候回我们发现过去申请的空间太小了有时候我们又觉得申请的空间过大了那未来合理的时候的内存我们一定会对内存的大小做灵活的调整。那realloc函数就可以做到对动态内存大小的调整。 函数原型如下 void* realloc (void* ptr, size_t size); ptr是要调整的内存地址size调整之后新大小返回值为调整之后的内存起始位置这个函数调整原内存空间大小的基础上还会将原来内存中的数据移动到新的空间realloc在调整内存空间的是存在两种情况 情况1原有内存之后有足够大的空间 情况2原有空间之后没有足够大的空间 int main() {int* p (int*)calloc(10, sizeof(int));if (p NULL){perror(malloc);return 1;}int i 0;for (i 0; i 10; i){printf(%d , *(p i));}//空间不理想想要扩大空间20个整型int* ptr (int*)realloc(p, 20 * sizeof(int));if (ptr ! NULL){p ptr;}else {perror(realloc);return 1;}//释放空间free(p);p NULL;return 0; }realloc 1.realloc调整空间失败会返回NULL 2.调整成功有两种情况 情况1 在已经开辟好的空间后面没有足够的空间直接进行空间的扩大在这种情况下realloc函数会在内存的堆区重新找一个空间满足新的空间的大小需求的同时会把旧的数据拷贝到新空间然后释放空间同时返回新的空间的起始地址 情况2 在已经开辟好的空间后边有足够的空间直接进行扩大扩大空间后直接返回旧的空间的起始地址 realloc该函数除了能够调整空间之外他还能实现和malloc一样的功能 int main() {int* p (int*)realloc(NULL, 40);//等价于macllocif (p NULL){perror(malloc);return 1;}4. 常见的动态内存的错误 对NULL直接的解引用操作 int main() {int* p (int*)malloc(100);*p 20;//p有可能是NULL指针的return 0; }正确写法 int main() {int* p (int*)malloc(100);if (p NULL){//报错信息perror(malloc);return 1;}*p 20;//释放free(p);p NULL;return 0; }对动态开辟空间的越界访问 int main() {int* p (int*)malloc(40);if (p NULL){return 1;}int i 0;for (i 0; i 10; i){*(p i) i;//当循环到第11次时就越界访问了}free(p);p NULL;return 0; }对非动态开辟内存使用free释放 nt main() {int a 10;int* p (int*)malloc(40);if (p NULL){return 1;}//使用//...p a;//p指向的空间就不再是堆上的空间free(p);//程序崩溃p NULL;return 0; }malloc/calloc/realloc 申请的空间如果不主动释放出了作用域是不会被销毁的 释放的方式 1.free主动释放 2.直到程序结束才由操作符回收 使用free释放一块动态开辟内存的一部分 int main() {int a 10;int* p (int*)malloc(40);if (p NULL){return 1;}p;//p不再指向动态内存的起始位置了free(p);//程序崩溃p NULL; }对同一块动态内存多次释放 int main() {int a 10;int* p (int*)malloc(40);if (p NULL){return 1;}free(p);free(p);//重复释放程序崩溃p NULL;return 0; }动态开辟内存忘记释放内存泄露 void test() {int* p (int*)malloc(100);if (p ! NULL){*p 20;} }int main() {test();while (1); }忘记释放不再使用的动态开辟的空间会造成内存泄露 切记动态开辟的空间一定要释放并且正确释放 5. 动态内存经典笔试题分析 题目1 void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, hello world);printf(str); }int main() {Test();return 0; }解析 GetMemory函数采用值传递的方式无法将malloc开辟空间的地址放回str中调用结束后str依然是NULL指针strcpy中使用了str,就是对NULL指针解引用操作程序崩溃内存泄露 正确代码 void GetMemory(char** p) {*p (char*)malloc(100);return p; } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, hello world);printf(str);free(str);str NULL; }int main() {Test();return 0; }题目2 char* GetMemory(void)//局部变量 {char p[] hello world;return p;//返回的是p首元素的地址 } void Test(void) {char* str NULL;str GetMemory();printf(str);//野指针 }int main() {Test();return 0; }题目3 void GetMemory(char** p, int num) {*p (char*)malloc(num); } void Test(void) {char* str NULL;GetMemory(str, 100);strcpy(str, hello);printf(str); }int main() {Test();return 0; }题目4 void Test(void) {char* str (char*)malloc(100);strcpy(str, hello);free(str);//释放了空间但是里面还存放着地址str也就变成了野指针if (str ! NULL){strcpy(str, world);//非法访问printf(str);} }int main() {Test();return 0; }6. 柔性数组 也许 你从未听说过柔性数组这个概念但是它确实是存在的。C99中结构中的最后一个元素允许是未知大小的数组这就叫做柔性数组成员 在结构体中最后一个成员未知大小的数组 这个数组就是柔性数组 例如 struct st_type {int i;int a[];//柔性数组成员 };柔性数组的特点 结构体中的柔性数组成员前面必须至少一个其他成员sizeof返回的这种结构体大小不包含柔性数组的内存包含柔性数组成员的结构用malloc()函数进行内存的动态分配并且分配的内存应该大于结构的大小以适应柔性数组的预期大小 例如 struct s {int n;int arr[]; };int main() {printf(%d\n, sizeof(struct s));//4个字节return 0; }柔性数组的使用 struct s {char c;int n;int arr[]; };int main() {//printf(%d\n, sizeof(struct s));//4个字节struct s*ps(struct s*)malloc(sizeof(struct s) 10 * sizeof(int));if (ps NULL){perror(malloc);return 1;}ps-c w;ps-n 100;int i 0;for (i 0; i 10; i){ps-arr[i] i;}//假设空间不足struct s* ptrrealloc(ps, sizeof(struct s) 15 * sizeof(int));if (ptr ! NULL){ps ptr;}else {perror(realloc);}//继续使用//释放free(ps);ps NULL;return 0; } 7. 总结C/C中内存区域划分 C/C程序内存分配的几个区域 栈区在执行函数时函数内局部变量的存储单元都可以在栈上创建函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中效率很高但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等堆区一般由程序员分配释放若程序员不释放程序结束时可能由OS回收。分配方式类似于链表数据段静态区存放全局变量、静态数据。程序结束后由系统释放代码段存放函数体类成员函数和全局函数的二进制代码
http://www.tj-hxxt.cn/news/230979.html

相关文章:

  • 广东网站开发软件现在做推广有什么好的方法
  • 做网站的什么公司最好分类信息网址
  • 购物网站制作教程北京公司网站制作要多少钱
  • 罗湖做网站运营乐云seo网址大全免费下载
  • 外贸网站布局网站群建设平台
  • 运城做网站哪家好免费网络游戏排行榜前十名
  • 为什么要用h5建站做网站需要怎么分工
  • 如何创建商业网站欧力虎网站建设
  • 建设网站建设哪里好凡客诚品官方网站
  • 网站建设公司net2006济南网络免费推广网站
  • dw旅游网站模板html网页制作小刘在线课程
  • 网站开发客户哪里找浏览器大全列表
  • 手机网站建设多少钿私有云网站建设
  • 营销策划包括哪些内容江门关键词优化广告
  • wordpress怎么给别人建站山东做网站公司
  • 新网站快速排名软件衡阳购物网站开发案例
  • 成都房产信息查询官方网站wordpress微信群机器人
  • 百度 搜索到手机网站动漫制作专业在广西哪所院校最强
  • 网站服务器是干什么的西安seo交流
  • 网站个人备案类型怎样制作免费手机网站
  • 无锡网站营销推广中国黄金集团建设有限公司官方网站
  • 网站后台管理系统需求网站建设net接口
  • seo网站源码乐山市规划和建设局网站
  • 做职业规划的网站网站上传图片不成功
  • 网站开发技能有哪些公司网站百度排名没有了
  • 惠州做网站好的公司光华路网站建设
  • 农村做网站开发快速建站完整版
  • 做网站反复修改WordPress网站转APP插件
  • 网站建设如何入账从零开始wordpress主题
  • 网站需要优化的小型公司网站地址英文