03 静态开辟内存与动态开辟内存

Android Ndk 学习笔记(目录)

1 c语言中 ,非0 及true 0 == false

void m03t1(){

    // c语言中 ,非0 及true   0 == false
    if (0){
        printf("这是真\n");
    }else{
        printf("这是假\n");
    }
    if (124){
        printf("这是真\n");
    }else{
        printf("这是假\n");
    }
    if (-3){
        printf("这是真\n");
    }else{
        printf("这是假\n");
    }
}
E:\C\Project\C01\cmake-build-debug\C01.exe
这是假
这是真
这是真
Process finished with exit code 0

2 开辟静态区域

void m03t2(){
    // 开辟静态区域
    // 开辟是直接进栈 ,确认大小
    // 栈的大小是有限的 ,下面代码将发生错误
    // int bigArr[10 * 1024 * 1024] ; // 10 * 4(int) = 40M  //栈溢出
    int arr[5];
    int i = 9 ;
    double sk = 123;
}

3 开辟动态区域 malloc

void m03t3(){
    // 开辟动态区域  malloc

    // 需要引入 #include <stdlib.h>
    int * arr = malloc(10 * 1024 * 1024); // 在堆中开辟 40M 空间  不会堆溢出

    // 开辟后续要手动释放内存
    free(arr);
    // 需要把指针置空 ,否者该指针就成为了 悬空指针
    arr = NULL ;
}

4 静态开辟的内存空间大小,是不能修改的,如果不需要动态修改空间大小,当然使用 栈区 【尽量使用 静态开辟的,如果实在是需要动态改变才使用malloc

void m03t4(){
    // 静态开辟的内存空间大小,是不能修改的,如果不需要动态修改空间大小,
    // 当然使用 栈区 【尽量使用 静态开辟的,如果实在是需要动态改变才使用malloc】
    int num = 5 ;
    // 开辟的大小 与类型有关
    int * arr = (int *) malloc(sizeof(int) * num);
    double * doubleArr = (double *) malloc(sizeof(double) * num);
    if (doubleArr){
        free(doubleArr);
        doubleArr = NULL ;
    }
    //realloc() 函数  重新分配内存地址 ,
    int new_num = 10 ;
    // 第一个参数是 原数组的指针
    // 第二个参数是 新数组的总大小
    // 如果内存空间足够 ,新的arr地址 将会从arr 原地址往后延伸
    // 如果内存空间不够延续时 ,会复制旧数据,找到一块新足够长的地址进行复制操作
    // 如果内存空间不够延续,并且也找不到足够长的地址时 ,将会重建失败
    int * arr2  = realloc(arr ,sizeof(int) * new_num);

    // arr2 不等于空  非0即true
    // arr2 成功后 ,会释放掉原来arr的指针,重新返回一个指针,
    // 虽然返回的指针有可能和原来的指针一样,即不能再次释放掉原来的指针。
    if (arr2){
        free(arr2);
        arr2 = NULL ;
        arr = NULL ;
    }else{
    	free(arr);
        arr = NULL ;
    }



}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值