11.21

malloc赋值

  1. #include<stdio.h>
  2. int *p = (int*)malloc(4);
  3. *p = 0;
  4. int *q = (int*)malloc(40); //申请一段数组的空间
  5. int i;
  6. for(i=0;i<10;i++){
  7. p[i]=0;
  8. }
  9. free(p); //释放

注意点

  • 千万别越界,可以申请多了,但不能少了,否则电脑会卡住

  • 一个指针指向了一块堆区空间,千万不要再指向另一块
    会导致内存丢失,但还会一直占用这个空间,如果在循环中后果更严重
    可用一个新的指针记录这个地址

free注意点

  • free后的空间,指针就不能用了。指针指向的值被初始化了,那块内存还给系统了,但是存的地址是不变的。所以,一般指针释放后,赋值一个NULL,即空指针。所访问空间受限的的叫野指针
  • 不能重复释放同一块空间
  • 不能释放栈区空间(系统控制的空间)
  • 一定要释放头指针
  • malloc的空间程序结束时,系统会自动释放所malloc的内存

memset

将一段内存所有字节设置为0

  1. #include<memory.h>
  2. int *p =(int*)malloc(40);
  3. memset(p,0,40);