动态内存分配

输入数据

如果输入数据时,先告诉你个数,然后再输入,要记录每个数据

C99可以用变量做数组定义的大小,C99之前呢?

  1. int *a=(int*)malloc(n*sizeof(int));

例:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main(void){
  4. int number;
  5. int *a;
  6. int i;
  7. printf("输入数量:");
  8. scanf("%d",&number);
  9. a=(int*)malloc(number*sizeof(int));
  10. //因为malloc是指向void的指针所以要把指针转换为int类型
  11. for(i=0;i<number;i++){
  12. scanf("%d",&a[i]);
  13. }
  14. for(i=number-1;i>=0;i--){
  15. printf("%d ",a[i]);
  16. }
  17. free(a);
  18. //将内存还给系统
  19. }

malloc

  1. #include<stdlib.h>//引入头文件
  2. void *malloc(size_t size);//申请空间

向malloc申请的空间大小是以字节为单位的

返回的结果是void*,需要类型转换为自己需要的类型

  1. (int*)malloc(n*sizeof(int));

如果没空间了呢?

如果申请失败则返回0,或者叫做NULL

free()

把申请来的空间还给”系统“

申请过的空间都应该还回去

只能还申请来的空间的首地址

常见问题

申请了没free—>长时间运行内存逐渐下降

free过了再free

地址变过了,直接去free