关闭

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

标签: c++iostreamincludenull
482人阅读 评论(0) 收藏 举报

#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之类的现成的解决方案可能会更有效。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:498676次
    • 积分:8416
    • 等级:
    • 排名:第2400名
    • 原创:332篇
    • 转载:85篇
    • 译文:3篇
    • 评论:60条
    最新评论