zoukankan      html  css  js  c++  java
  • malloc、free、new、delete

    一、C语言中不定大小多维数组的处理:

    如果要给二维数组(m*n)分配空间,代码可以写成下面:

    char **a, i;
    
    // 先分配m个指针单元,注意是指针单元
    
    // 所以每个单元的大小是sizeof(char *)
    
    a = (char **) malloc(m * sizeof(char * ));
    
    // 再分配n个字符单元,
    
    // 上面的m个指针单元指向这n个字符单元首地址
    
    for(i = 0; i < m; i++)
    
    a[i] = (char * )malloc(n * sizeof(char ));

    释放应该是:

    int i;
    
    for(i=0;i<m;i++)
    
        free((void *)a[i]);
    
    free((void *)a);

    如果为三维数组(m*n*p)分配空间呢,应该是:

    char ***a, i, j;
    
    a = (char ***) malloc(m * sizeof(char ** ));
    
    for(i = 0; i < m; ++i)
    
        a[i] = (char **) malloc(n * sizeof(char * ));
    
    for(i = 0; i < m; ++i)
    
        for(j = 0; j < n; ++j)
    
            a[i][j] = (char * )malloc(p * sizeof(char ));

    释放代码为逆过程,具体代码为:

    int i,j,;
    
    for(i = 0; i < m; ++i)
    
        for(j = 0; j < n; ++j)
    
            free((void *)a[i][j]);   
    
    for(i = 0; i < m; ++i)
    
        free((void *)a[i]);
    
    free((void *)a);

    三维以上的多维数组的分配和释放,原理与上面的一样。

    二、C中如何为第二维长度固定的二维数组分配内存

    在所写的代码中,有时需要为一个二维数组分配内存,该二维数组的第一维长度不定,而 第二维是固定(类似arr[n][3]的数组)。我们可以想到的是用双指针代替数组,当然可以;也可以直接对n赋值后,直接定义arr[n][3] (C99标准支持),但这里要说的是另一种方法。

    这里以将点云数据读入二维数组为例,由于点云点数n不定,可以确定的是,点是三维点,可以用以下方式定义并分配内存:

    double (*arr)[3] = malloc (n*3*sizeof(double));

    但在VC编译环境下,将会报错——无法从“void *”转换为“double (*)[3]” ,此时应该在malloc函数之前进行类型转换,应该如何转换呢?怎样转换才能成double (*)[3]类型呢,可以进行如下转换:

    double (*arr)[3] = (double ((*)[3]))malloc (n*3*sizeof(double));

    搞定!:)。

    三、C++之new    delete

    1.普通类型(结构体、类等都一样):

    int* a;

    a=new int;

    *a=3;

    delete a;

    2.数组:

    int* a;

    a=new int[num];

    delete []a;

     
  • 相关阅读:
    我的浏览器收藏夹分类
    我的浏览器收藏夹分类
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 318 最大单词长度乘积
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 316 去除重复字母
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
    Java实现 LeetCode 315 计算右侧小于当前元素的个数
  • 原文地址:https://www.cnblogs.com/jiu0821/p/4179316.html
Copyright © 2011-2022 走看看