一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何在C++中動態(tài)分配二維數(shù)組

 oskycar 2011-12-02

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void **darray_new(int row, int col, int size)
{
void **arr;

arr = (void **) malloc(sizeof(void *) * row + size * row * col);
if (arr != NULL)
{
void *head;

head = (void *) arr + sizeof(void *) * row;
memset(arr, 0, sizeof(void *) * row + size * row * col);
while (row--)
arr[row] = head + size * row * col;
}
return arr;
}

void darray_free(void **arr)
{
if (arr != NULL)
free(arr);
}

嗯,連續(xù)分配內存,而且可以用a[x][y]的方式來訪問!可謂二維數(shù)組動態(tài)分配的絕妙方法!這段程序是C的,似乎要改成支持對象分配的C++版也不是什么難事(不過估計得用上placement new吧,嗯,需要再思考一下……)。

2007-06-13 12:38 補充:

  經過試驗,C++版出爐了:)關鍵點還是在于placement new和顯示的析構函數(shù)調用,用于保證對象可以正常的構造和析構。
  這個實現(xiàn)也還是有不少缺點的,比如,數(shù)組的大小必須記住,才能保證析構所有對象。不過這點可以通過改進分配方法算法,把數(shù)組大小也用一點空間保存起來。
  另一個缺點是,從語法上看,很容易讓人誤把darray_new返回的指針以為是數(shù)據(jù)區(qū)的起始地址,從而可能導致一些邏輯錯誤。

#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);
}

2007-06-13 21:00補充
本文僅為技術層面的討論,實踐中考慮用
boost::multi_array之類的現(xiàn)成的解決方案可能會更有效。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    99久免费精品视频在线观| 少妇激情在线免费观看| 激情亚洲一区国产精品久久| 亚洲一区二区三区三区| 男女午夜福利院在线观看| 中文字幕人妻av不卡| 亚洲av首页免费在线观看| 91在线爽的少妇嗷嗷叫| 日韩人妻中文字幕精品| 九九蜜桃视频香蕉视频| 国产免费黄片一区二区| 国产免费一区二区三区av大片| 国产a天堂一区二区专区| 国产在线小视频你懂的| 亚洲黄片在线免费小视频| 亚洲一级二级三级精品| 日韩在线欧美一区二区| 91人妻人人精品人人爽| 欧美日韩免费黄片观看| 日韩一区二区三区18| 91亚洲精品综合久久| 国产男女激情在线视频| 免费国产成人性生活生活片| 亚洲日本加勒比在线播放| 二区久久久国产av色| 国产免费成人激情视频| 成人区人妻精品一区二区三区| 日韩精品一区二区不卡| 九九热国产这里只有精品| 91香蕉视频精品在线看| 欧美日韩亚洲国产av| 国产午夜福利片在线观看| 一区二区在线激情视频| 尹人大香蕉中文在线播放| 人妻少妇久久中文字幕久久 | 91亚洲国产成人久久| 夫妻激情视频一区二区三区| 国产91人妻精品一区二区三区| 国产91色综合久久高清| 黄色日韩欧美在线观看| 91亚洲国产成人久久|