账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    内存释放问题
    52
    0
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdbool.h>
    
    void printarr(int m,int n,int arr[n][n])
    {
        for(int i= 0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                printf("%5d ",arr[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    void clearzero(int m,int n,int (*str)[n])
    {
        /*定义两个一维数组标识保存该行/列是否有零*/
        bool *row = (bool *)malloc(m * sizeof(bool));
        bool *col = (bool *)malloc(n * sizeof(bool));
        /*初始化*/
        /*添加memset与否决定程序运行是否正确*/
        memset(row, 0x0, m);
        memset(col, 0x0, n);
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(str[i][j] == 0)
                {
                    row[i] = true;
                    col[j] = true;
                }
            }
        }
        
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                /*当前元素所在行/列为0,置元素为0*/
                if(row[i] || col[j])
                {
                    str[i][j] = 0;
                }
            }
        }
        free(row);
        row = NULL;
        
        free(col);
        col = NULL;
    }
    
    
    
    int main(int argc, const char * argv[])
    {
        int str[3][3] = {{1,2,3},{0,1,2},{0,0,1}};
        clearzero(3,3,str);
        printarr(3,3,str);
        
        int cool[5][3] = {{1,2,3},{1,1,2},{0,2,1},{1,2,0},{2,3,4}};
        clearzero(5,3,cool);
        printarr(5,3,cool);
        return 0;
    }
    
    

    上面代码中我申请了两个bool类型的数组,释放的话怎么释放呢?
    我直接在最后free(row) row = NULL; free(col) col = NULL;程序结果与预期不符,这是为什么呢?
    这块内存到底该怎么释放呢?难道我要一个一个的遍历这两个数组,然后去释放?
    如果不添加如下两行,程序运行结果错误:
    memset(row, 0x0, m);
    memset(col, 0x0, n);
    这究竟是为什么呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 傅家二少 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部