a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

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

2020-01-26 16:00:23
字體:
供稿:網(wǎng)友
首先,小編先貼出測試代碼:
復(fù)制代碼 代碼如下:

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

 cout<<"內(nèi)存的不連續(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<<"內(nèi)存的連續(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;
}

運行截圖如下:



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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 91麻豆精品一区二区三区 | 国产中文字幕在线 | 狠狠色噜噜狠狠狠8888米奇 | 男女免费在线观看视频 | 亚洲人黄色片 | 成年人在线观看 | 美日韩在线 | 国产老女人精品毛片久久 | 久久精品无码一区二区日韩av | 国产精品一区二区三区在线播放 | 久久伊人影院 | 美女一区二区三区在线观看 | 国产视频网 | 欧美日韩第一区 | 日韩一二三区 | 欧日韩不卡在线视频 | 欧美日韩在线观看一区二区三区 | 久久国产高清 | av午夜电影 | av在线免费观看网站 | 天天操天天干天天做 | 日韩欧美一区二区三区免费观看 | 91丁香| 日韩视频免费在线观看 | 午夜视频观看 | 久久久国产精品x99av | 天堂久久久久 | 毛片视频播放 | 久久久久久久久久久久国产精品 | 红色av社区 | 成人sese | 亚洲免费av在线 | 国产精品久久久久久久久久 | 免费观看一级特黄欧美大片 | 欧美激情精品久久久久久 | 99re6在线 | 美女午夜视频 | 午夜高清视频在线观看 | 污片在线免费看 | 一区二区精品视频 | 亚洲精品v日韩精品 |