久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    如何在C++中動態分配二維數組

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

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

    2007-06-13 12:38 補充:

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

    #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之類的現成的解決方案可能會更有效。

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

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: √天堂中文www官网在线| 国产精品国产三级国产试看| 国产精品国产三级国产AV主播| 亚洲AV永久精品无码桃色| 国产亚洲精品VA片在线播放 | 国产影片AV级毛片特别刺激| 1000部拍拍拍18勿入免费视频| 亚洲夂夂婷婷色拍ww47| 精品卡通动漫亚洲AV第一页| 美女爽到高潮嗷嗷嗷叫免费网站| 蜜芽久久人人超碰爱香蕉| 九九久久精品国产免费看小说| 国产女精品视频网站免费蜜芽| 成人爽A毛片在线视频淮北| 亚洲AV无码专区亚洲AV| 美乳丰满人妻无码视频| 久久婷婷综合色丁香五月| 国产亚洲一二三区精品| 久久99精品久久久久久齐齐| 国产精品亚洲二区在线看| 色天天天综合网色天天| 少妇人妻无码专区视频| 卡一卡2卡3卡精品网站| 国产仑乱无码内谢| 亚洲国产成人精品福利无码| av午夜福利一片免费看久久| 午夜大片免费男女爽爽影院| a级黑人大硬长爽猛出猛进| 午夜在线观看免费观看 视频| 亚洲国产精品综合久久2007| 国产精品久久久久久久网| 亚洲精品二区在线播放| 少妇肉麻粗话对白视频| 天天澡日日澡狠狠欧美老妇| 国产成人精品综合在线观看| 三级三级三级A级全黄| 亚洲精品一区二区天堂| 精品无人区无码乱码毛片国产| 精品日韩亚洲AV无码| 亚洲日韩久热中文字幕| 中文字幕无码AV激情不卡|