• 0038 内存分配


    /*
       C语言中提供了3个动态内存分配函数:
     
        1)malloc 函数
     
          格式: void * malloc(unsigned size);
     
          从内存的堆区分配大小为size个字节的连续的内存空间
          如果内存分配成功  返回内存的首地址
     
                    失败  NULL
     
     
     
     
     
     
     */
    
    
    #include <stdio.h>
    #include <stdlib.h>
    /**
     *  malloc函数的使用
     */
    void test1(){
    
        //从内存中申请一块内存空间,可以存储4个整数
        // = 赋值,要求等号的左右两侧的类型要一致
        //p中存放的事新申请的内存空间的首地址
        //注意:malloc 申请的内存空间,如果我们不赋值?
        //     是垃圾数
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
        
        //使用一个函数给malloc申请的空间进行初始化
        memset(p,'a',16);
        
        if (p!=NULL) {
            
            //申请成功做的事情
            //        *p = 10;
            //        *(p+1) = 100;
            //        *(p+2) = 1000;
            //        *(p+3) = 10000;   //存放4个整数
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        for(int i=0;i<4 ;i++){
            
            printf("%c	",*(p+i));
            
        }
    
    }
    
    
    void test2(){
    
    
        //callloc 分配指定块数和长度的内存空间
        //格式:calloc(块数,长度)
        //分配了4块,每一块内存长度为4的内存空间
        //他们的地址也是连续的
        
        //注意事项:
        //calloc 它使可以帮我们自动的初始化为0
        int *p = (int *)calloc(4, sizeof(int));   //16个字节
        
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        for(int i=0;i<4 ;i++){
            
            printf("%d	",*(p+i));
            
        }
    
    }
    int main(int argc, const char * argv[]) {
        
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
        printf("old %p
    ",p);
        //realloc 函数可以给已经存在的空间扩充大小
        p = realloc(p, 40*sizeof(int));
        printf("new %p
    ",p);
        //40个内存空间
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
            *(p+39)= 1;
            printf("%d
    ",*(p+39));
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
        
        }
        
        for(int i=0;i<4 ;i++){
        
            printf("%d	",*(p+i));
        
        }
        
        return 0;
    }
    
    //
    //  main.c
    //  07-野指针和内存泄露
    //
    //  Created by apple on 15/1/9.
    //  Copyright (c) 2015年 itcast. All rights reserved.
    //
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, const char * argv[]) {
        
        int *p1;
        
        int *p = (int *)malloc(4*sizeof(int));   //16个字节
    
        if (p!=NULL) {
            
            //申请成功做的事情
            *p = 10;
            *(p+1) = 100;
            *(p+2) = 1000;
            *(p+3) = 10000;   //存放4个整数
            
            
        }else{
            //内存申请失败
            printf("内存申请失败!
    ");
            
        }
        
        
        //应该使用free()函数释放内存空间
        //free(要释放的空间的首地址)
        free(p);
        //free(p)以后,p是一个野指针
        p = NULL;
        
        *p = 100;
        printf("%d
    ",*p);
        
        return 0;
    }
    
  • 相关阅读:
    django文章对本项目有用的收集
    C#Selenium常用语法功能 很好的文章,值得参考收藏
    C# selenium 高级
    隐士等待与显示等待
    技术不可持续性所面对的挑战及解决方案
    机器人语言特性探索2-正在发生的趋势
    下一个十年计划,兼谈上十年的总结
    机器人语言特性探索1-总体方向
    中国文化
    网络化沟通及协作的人机交互编程语言-机器人语言5(总结)
  • 原文地址:https://www.cnblogs.com/aiti/p/4672192.html
Copyright © 2020-2023  润新知