Welcome

首页 / 软件开发 / C++ / C++二维指针动态分配内存连续问题

C++二维指针动态分配内存连续问题2013-11-24当我们定义一个二维指针时,如果需要存储相应的数据,就需要我们动态的分配内存,这时,有一点是需要注意的,分配内存的方法不同,内存的连续性也是不相同的,首先,博主先贴出测试代码:

#include <cstdlib>#include <iostream>using namespace std;#define nWidth3#define nHeight 4//内存是否连续分配问题 int main(int argc, char *argv[]){int **p = NULL;p = (int**)malloc(nWidth*sizeof(int*));if(p == NULL)return -1;cout<<"内存的不连续分配:"<<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<<"内存的连续分配:"<<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;}