美文网首页
指针的运算:动态内存分配

指针的运算:动态内存分配

作者: 爱生活_更爱挺自己 | 来源:发表于2020-07-02 22:11 被阅读0次

    指针的运算:动态内存分配

    • 如果输入数据时,先告诉你个数,然后再输入,要记录每个数据
    • C99可以用变量做数组定义的大小,C99之前呢?
    • int *a = (int *)malloc(n * sizeof(int));
    #include<stdio.h>
    #include<stdlib.h>
    
    int main(void)
    {
        int number;
        int* a;
        int i;
        printf("输入数量:");
        scanf("%d",&number);
        a =(int*)malloc(number*sizeof(int));
        for (i=0; i<number;i++){
            scanf("%d", &a[i]);
        }
        for (i=number-1; i>=0; i++){
            printf("%d", a[i]);
        }
        free(a);
        
        return 0;
    }
    

    malloc

    #include<stdlib.h>

    *void malloc(size_t size);

    • 向malloc申请的空间的大小是以字节为单位的
    • 返回的结果是void*,需要类型转换为自己需要的类型
      • (int *) malloc(n *sizeof(int))

    没空间了?

    • 如果申请失败则返回0,或者叫做NULL
    • 你的系统能给你多大的空间?
    #include<stdio.h>
    #include<stdlib.h>
    
    int main(void)
    {
        void *p;
        int cnt = 0;
        while ( (p=malloc(100*1024*10024)) ){
            cnt++;
        }
        printf("分配了%d00MB的空间\n", cnt);
        
        return 0;
    }
    

    free()

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

    • 申请过的空间,最终都应该要还

      • 混出来的,迟早都要还的
    • 只能还申请来的空间的首地址

    常见问题

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

    • free过了在free

    • 地址变过了,直接去free

    相关文章

      网友评论

          本文标题:指针的运算:动态内存分配

          本文链接:https://www.haomeiwen.com/subject/xbmdqktx.html