在C++中动态分配二维数组

原创 2007年09月24日 11:20:00

#include <iostream>
#include <cstdlib>
#include <new>

template <typename T>
T **darray_new(int row, int col)
{
    int size = sizeof(T);
    void **arr = (void **) malloc(sizeof(void *) * row + size * row * col);
    if (arr != NULL)
    {
        unsigned char * head;
        head = (unsigned char *) arr + sizeof(void *) * row;
        for (int i = 0; i < row; ++i)
        {
            arr[i] =  head + size * i * col;
            for (int j = 0; j < col; ++j)
                new (head + size * (i * col + j)) T;
        }
    }
    return (T**) arr;
}

template <typename T>
void darray_free(T **arr, int row, int col)
{
    for (int i = 0; i < row; ++i)
        for (int j = 0; j < col; ++j)
            arr[i][j].~T();
    if (arr != NULL)
        free((void **)arr);

实践中考虑用boost::multi_array之类的现成的解决方案可能会更有效。

相关文章推荐

C++中二维数组的动态分配

  • 2013年04月19日 22:21
  • 2KB
  • 下载

C语言动态分配二维数组

  • 2013年04月06日 17:04
  • 6KB
  • 下载

C++中如何动态分配二维数组

一直对二维数组 动态分配问题比较模糊,今天来终结一下。 我们一般使用二维数组可以直接定义如下: #include using namespace std; int main() { int ...

C/C++上二维数组的两种动态分配内存方法

最近在看一个程序的源代码的时候了解到了二维数组的动态分配空间以及释放的方法,在此记录。 一、二维数据的内存空间动态分配 二、二维数据的内存空间释放 三、完整代码...

C++中动态分配二维数组

一 下面三种定义形式怎么理解?怎么动态分配空间? (1)、int **Ptr; (2)、int *Ptr[ 5 ]; 我更喜欢写成 int* Prt[5]; (3)、int ( *Ptr ...
  • qqq4012
  • qqq4012
  • 2013年01月06日 16:32
  • 241

如何在C/C++中动态分配地址连续访问快速的二维数组

如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效...

如何在C、C++中动态分配二维数组

如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比...

二维数组动态分配

  • 2013年02月03日 21:00
  • 62KB
  • 下载

C/C++二维数组的动态分配及参数传递

1. C语言动态分配二维数组(1)已知第二维Code-1char (*a)[N];//指向数组的指针a = (char (*)[N])malloc(sizeof(char *) * m);printf...
  • ch1308
  • ch1308
  • 2011年01月01日 22:20
  • 409

在C/C++计算机语言中动态分配二维数组

如何在C/C++中动态分配二维数组 在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C++中动态分配二维数组
举报原因:
原因补充:

(最多只允许输入30个字)