• C提高_day03_指针的输出模型


    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
     
    //指针做输出:被调用函数分配内存  -----OK
    //指针做输入:主调用函数 分配内存
    //求文件中的两段话的长度
    int getMem(char **myp1, int *mylen1, char **myp2, int *mylen2)
    {
        char *tmp1 = NULL;
        char *tmp2 = NULL;
        tmp1 = (char *)malloc(100);
        if (tmp1 == NULL)
        {
            return -1;
        }
        strcpy(tmp1, "abcdefg");
        *mylen1 = strlen(tmp1);
    
        *myp1 = tmp1; //间接修改实参p1的值
    
        tmp2 = (char *)malloc(100);
        if (tmp2 == NULL)
        {
            return -2;
        }
        strcpy(tmp2, "11122233333");
        *mylen2 = strlen(tmp2);
    
        *myp2 = tmp2; //间接修改实参p1的值
        return 0;
    }
    
    int getMem_Free(char **myp1)
    {
    
        /*
        if (myp1 == NULL)
        {
            return ;
        }
        free(*myp1);  //释放完指针变量 所致的内存空间
        *myp1 = NULL;  //把实参修改成nULL
        */
        char *tmp = NULL;
        if (myp1 == NULL)
        {
            return -1;
        }
        tmp = *myp1;
        free(tmp);  //释放完指针变量 所致的内存空间
        *myp1 = NULL;  //把实参修改成nULL
        return 0;
    }
    
    
    void main()
    {
        char  *p1 = NULL;
        int len1 = 0;
    
        char *p2 = NULL;
        int len2 = 0;
    
        int ret = 0;
    
        ret  = getMem(&p1, &len1, &p2, &len2 );
    
        printf("p1: %s 
    ", p1);
        printf("p2: %s 
    ", p2);
    
        getMem_Free(&p1);
        getMem_Free(&p2);  
    
        system("pause");
        return ;
    }

    另外的一个释放函数:

    int getMem_Free0(char *myp1)
    {
        if (myp1 == NULL)
        {
            return -1;
        }
        free(myp1);  //释放完指针变量 所致的内存空间
    
        myp1 = NULL;
    
        return 0;
    }
    
    void main14()
    {
        char  *p1 = NULL;
        int len1 = 0;
    
        char *p2 = NULL;
        int len2 = 0;
    
        int ret = 0;
    
        ret  = getMem(&p1, &len1, &p2, &len2 );
    
        printf("p1: %s 
    ", p1);
        printf("p2: %s 
    ", p2);
    
        if (p1 != NULL)
        {
            free(p1);
            p1 = NULL;
        }
        if (p2 != NULL)
        {
            free(p2);
            p2 = NULL;
        }
    
        getMem_Free0(p1);  //在被调用函数中  把p1所指向的内存给释放掉 ,但是 实参p1不能被修改成NULLL 有野指针现象
        getMem_Free0(p2);  
    
        system("pause");
        return ;
    }
    Stay hungry,Stay foolish
  • 相关阅读:
    【bzoj 4710】 [Jsoi2011]分特产
    【bzoj 3622】已经没有什么好害怕的了
    【bzoj 2839】集合计数
    [HAOI2018]染色
    [JSOI2016]扭动的回文串
    [APIO2014]回文串
    【AT987】高橋君
    [CEOI2017]Building Bridges
    [ZJOI2017]树状数组
    [SDOI2017]树点涂色
  • 原文地址:https://www.cnblogs.com/zhesun/p/4962324.html
Copyright © 2020-2023  润新知