最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

二維指針動態(tài)分配內存連續(xù)問題深入分析

 更新時間:2013年07月11日 10:46:58   作者:  
當我們定義一個二維指針時,如果需要存儲相應的數(shù)據(jù),就需要我們動態(tài)的分配內存,這時,有一點是需要注意的,分配內存的方法不同,內存的連續(xù)性也是不相同的
首先,小編先貼出測試代碼:
復制代碼 代碼如下:

#include <cstdlib>
#include <iostream>
using namespace std;
#define nWidth  3
#define nHeight 4
//內存是否連續(xù)分配問題
int main(int argc, char *argv[])
{
    int **p = NULL;
    p = (int**)malloc(nWidth*sizeof(int*));
    if(p == NULL)
    return -1;

 cout<<"內存的不連續(xù)分配:"<<endl;
    for(int j = 0; j< nWidth; j++)
    {
       p[j] = (int*)malloc(nHeight*sizeof(int));
       if(p[j] == NULL)
       return -1;
    }

    for(int i = 0; i < nWidth; i++)
  for(int j = 0; j < nHeight; j++)
  {
   printf("%p  ",&p[i][j]);
   if(j == nHeight-1)
    cout<<endl;
  }
    cout<<endl;

    for(int j = 0; j < nWidth; j++)
    {
       free(p[j]);
       p[j] = NULL;       
    }
    free(p);
    p = NULL;

   
 int **q = NULL;
    q = (int**)malloc(nWidth*sizeof(int*));
    if(q == NULL)
    return -1;

 cout<<"內存的連續(xù)分配:"<<endl;
    q[0] = (int*)malloc(nWidth*nHeight*sizeof(int));
    if(q[0] == NULL)
    {
        free(q);
        return -1;
    }
    for(int i = 1;i < nWidth; i++)
    q[i] = q[i-1] + nHeight;

    for(int i = 0; i < nWidth; i++)
  for(int j = 0; j < nHeight; j++)
  {
   printf("%p  ",&q[i][j]);
   if(j == nHeight-1)
    cout<<endl;
  }
    cout<<endl;

    free(q[0]);
    q[0] = NULL;
    free(q);
    q = NULL;

    system("PAUSE");
    return EXIT_SUCCESS;
}

運行截圖如下:



如圖所示,兩種分配內存的方法都能正確的分配內存,但是內存分配的空間確實不一樣的。
分析:
第一種分配方法:
首先,是對每一行分配,也就是 nWidth 中的每一個進行分配,所以,我們可以看到每一行的內存都是連續(xù)的,每一個都占據(jù)四個字節(jié)
但是,為nHeight分配內存的時候,是隨機的進行分配內存,所以內存的位置是不確定的,所以,出現(xiàn)了第一種情況

第二種分配方法:
首先,同樣是為 p 分配內存,現(xiàn)在 p 指向一個位置
但是,在第二句中,我們需要注意,是直接在 p[0] 出分配了所有需要的內存,所以,這個時候就全部分配完了,而且由于是一次性分配內存,故內存的地址肯定是連續(xù)的,運行結果也證明了這一點

釋放內存的兩種情況:
第一種情況由于是兩次不同的分配內存,所以,在釋放內存的時候,我們應選擇不同的區(qū)域進行釋放。
第二種情況,只是連續(xù)調用兩次 malloc  ,所以,只需要連續(xù)兩次調用 free 即可完成釋放。

相關文章

  • c++ 函數(shù)指針相關總結

    c++ 函數(shù)指針相關總結

    這篇文章主要介紹了c++ 函數(shù)指針的相關資料,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-02-02
  • 詳解C語言中fseek函數(shù)和ftell函數(shù)的使用方法

    詳解C語言中fseek函數(shù)和ftell函數(shù)的使用方法

    這篇文章主要介紹了C語言中fseek函數(shù)和ftell函數(shù)的使用方法,兩個函數(shù)分別用于設置和返回文件指針stream的位置,需要的朋友可以參考下
    2016-03-03
  • C語言實現(xiàn)圖書館管理系統(tǒng)

    C語言實現(xiàn)圖書館管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實現(xiàn)

    C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實現(xiàn)

    這篇文章主要介紹了C語言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實現(xiàn),,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • c++打印封裝每次打印前面加上時間戳問題

    c++打印封裝每次打印前面加上時間戳問題

    這篇文章主要介紹了c++打印封裝每次打印前面加上時間戳問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • C++使用fdk-aac實現(xiàn)將音頻PCM編碼成aac

    C++使用fdk-aac實現(xiàn)將音頻PCM編碼成aac

    mp4的音頻流通常是aac編碼,我們做音視頻采集的時候就需要將,采集的音頻PCM編碼成aac,本文就來為大家介紹一下C++如何使用fdk-aac實現(xiàn)將音頻PCM編碼成aac吧
    2023-11-11
  • c++實現(xiàn)高精度加法

    c++實現(xiàn)高精度加法

    高精度運算是指參與運算的數(shù)(加數(shù),減數(shù),因子……)范圍大大超出了標準數(shù)據(jù)類型(整型,實型)能表示的范圍的運算。例如,求兩個200位的數(shù)的和。這時,就要用到高精度算法了。
    2017-05-05
  • C++11如何引入的尾置返回類型

    C++11如何引入的尾置返回類型

    C++11 標準引入的尾置返回類型,可以讓返回復雜類型的函數(shù)聲明更加清晰易讀,在無法使用C++14 標準的情況下,通過尾置返回類型的語法來推導函數(shù)模板的返回類型無疑是最簡便的方法,這篇文章主要介紹了C++11引入的尾置返回類型,需要的朋友可以參考下
    2023-01-01
  • 減少OpenCV讀取高分辨率圖像的時間示例

    減少OpenCV讀取高分辨率圖像的時間示例

    今天小編就為大家分享一篇減少OpenCV讀取高分辨率圖像的時間示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++實現(xiàn)鼠標控制的黑框象棋

    C++實現(xiàn)鼠標控制的黑框象棋

    這篇文章主要為大家詳細介紹了C++實現(xiàn)鼠標控制的黑框象棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論

石渠县| 涡阳县| 海南省| 观塘区| 新营市| 东丰县| 北宁市| 库尔勒市| 乳源| 中西区| 上犹县| 绥棱县| 利辛县| 个旧市| 黎川县| 阿鲁科尔沁旗| 石狮市| 平谷区| 得荣县| 东乡| 旅游| 湘乡市| 泊头市| 洛阳市| 高碑店市| 柘荣县| 丰台区| 永济市| 巢湖市| 江川县| 阿勒泰市| 墨竹工卡县| 宝鸡市| 鹿邑县| 文登市| 葵青区| 惠州市| 开封市| 石台县| 潼关县| 健康|