动态数组释放内存,

  动态数组释放内存,

  Yyds干货库存

  @TOC

  一、动态记忆功能

  1.malloc函数

  大小代表字节数

  如果空间打开成功,将返回该空间的地址。

  如果打开空格失败,则返回NULL。

  正常情况下,创建10个造型空间应该是

  voidp=void malloc(10 sizoef(int));

  但是因为void dereference会报告一个错误

  so(int)p=(int)malloc(10sizeof(int));

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malo oc(10 * sizeof(int));

  如果(p!=空)

  int I=0;

  for(I=0;我我)

  *(p I)=I;

  免费(p);

  p=NULL

  返回0;

  }

  If free(NULL)表示什么都不做。

  2.calloc函数

  Num表示元素的数量

  大小代表字节数

  与malloc函数不同,calloc函数可以将每个元素初始化为0。

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malloc(10 * sizeof(int));

  如果(p!=空)

  int I=0;

  for(I=0;我我)

  printf(%d\n ,*(p I));//malloc未初始化为所有随机值。

  免费(p);

  p=NULL

  返回0;

  }

  #包含stdio.h

  #包含stdlib.h

  int main()

  int*p=(int*)calloc(10,sizeof(int));

  如果(p!=空)

  int I=0;

  for(I=0;我我)

  printf(%d\n ,*(p I));//calloc可以初始化全0。

  免费(p);

  p=NULL

  返回0;

  }

  3.realloc函数

  realloc函数是一个扩展空间的函数。

  Memblock是前一个的初始地址

  增加新空间的大小

  realloc返回值有两种情况:

  如果后面有足够的空间,则返回原来的初始地址;如果后面空间不够,将返回原地址。

  在下面创建一个空间,并将旧空间复制到新空间。旧空间将被返回给操作系统。

  返回新空间的初始地址。

  当两种情况都不存在,即无法打开新空间时,返回NULL。

  int*str=(int*)realloc(p,20 * sizeof(int));//正常情况下只返回P,但是考虑到为NULL时的情况,free(NULL)会什么都不做,造成内存泄漏。

  if(str!=空)

  p=str

  免费(p);

  p=NULL

  返回0;

  }

  二、常见的动态内存错误

  1.取消对NULL的引用操作

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malloc(10 * sizeof(int);

  int I=0;

  for(I=0;我我)

  *(p I)=I;//如果开拓失败,返回NULL *NULL,则报错。

  免费(p);

  p=NULL

  返回0;

  2.跨界进入动态空间

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malloc(10 * sizeof(int));

  如果(p!=空)

  int I=0;

  for(I=0;我我)

  *(p I)=I;//打开10个整数空间,试图访问40个整数,会导致越界访问。

  免费(p);

  p=NULL

  返回0;

  3.对非动态内存使用释放

  #包含stdio.h

  #包含stdlib.h

  int main()

  int arr[10]={ 0 };

  int * p=arr//arr是第一个元素,地址在堆栈上。

  免费(p);//如果动态内存在堆区的空闲堆栈区,会报错。

  p=NULL

  返回0;

  }

  4.用free释放一部分动态内存开发。

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malloc(10 * sizeof(int));

  如果(p!=空)

  int I=0;

  for(I=0;我我)

  * p=I;//p指针本身向后移动。释放P后面的空间会导致内存泄漏。

  免费(p);

  p=NULL

  返回0;

  }

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

  #包含stdio.h

  #包含stdlib.h

  int main()

  int * p=(int *)malloc(10 * sizeof(int));

  免费(p);

  //p=NULL;

  免费(p);

  //p=NULL;

  返回0;

  }

  在这一点上,它显示了p=NULL的重要性。如果没有这两个p=NULL,将会报告一个错误。

  而加free(NULL)就是什么都不做。

  6.忘记释放动态打开的空间。

  #包含stdio.h

  #包含stdlib.h

  无效测试()

  int * p=(int *)malloc(10 * sizeof(int));

  //免费(p);

  int main()

  test();

  返回0;

  p是指针变量,但也是局部变量。

  由于功能被破坏,malloc创建的10个塑形空间内存泄露。

  三、钢笔试题

  1.

  #包含stdio.h

  #包含stdlib.h

  #包含字符串. h

  空内存(char*p)

  p=(char *)malloc(100);

  int main()

  char * str=NULL

  内存(str);

  strcpy(str, hello world );

  printf(str);

  返回0;

  }

  将报告一个错误

  内存函数传递指针,由指针接收或由值调用。

  p是一个临时副本,它将和函数destroy 2一起被销毁。

  所以即使打开了动态内存,也不能传到str,str还是NULL。

  在记忆函数中,局部变量P会随着函数的结束而被销毁。

  动态内存打开的100字节内存存在泄漏。

  单词

  #包含stdio.h

  #包含stdlib.h

  #包含字符串. h

  无效内存(char**p)

  * p=(char *)malloc(100);

  int main()

  char * str=NULL

  内存(str);

  strcpy(str, hello world );

  printf(str);

  返回0;

  }

  第一级指针的地址作为地址调用被第二级指针传递和接收。

  动态内存可以返回

  2.

  #包含stdio.h

  #包含stdlib.h

  #包含字符串. h

  char *内存()

  char p[]= hello world ;

  返回p;

  无效测试()

  char * str=NULL

  str=memory();

  printf(str);

  int main()

  test();

  返回0;

  }

  将报告一个错误

  数组是在堆栈上创建的,随着函数的销毁而销毁。

  虽然返回p将H的地址传递给str

  但是当输出返回寻找记忆函数时,却找不到了。

  非法访问内存。

  四。灵活阵列

  柔性阵列上至少存在一个成员。

  使用sizeof计算大小时,不包括灵活数组的内存。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: