配色: 字号:
malloc分配多维数组(修改版)
2013-05-25 | 阅:  转:  |  分享 
  
有错误请大家提出来共同探讨,共同进步



之前的版本有些地方不完善,经张杰指出,(娜姐很好)错误以修正,请大家查阅!!!如果还有问题

请大家提出,共同探讨,予以修改!!! ----彭赞2012-02-27





1.学习内容:

今天学习了内存的动态分配,主要是使用malloc()---free()和new()—delete()!我自己不明白的地方是多维内存的分配,经常忘记了,也没理解清楚。下面是我写的测试程序:

程序1:

#include

#include

#include



voidmain(void)

{

inti,j;

intnum=0;

char(p)[12];//[100][12]

p=malloc(12sizeof(char)100); //这里修改了一下(修改成了为每个数组元素申 //请空间,10012sizeof(char)



for(j=0;j<100;j++)

{

for(i=0;i<12;i++)

{

p[j][i]=''1'';

}

p[j][i-1]=''\0'';

printf("%s",(p));

}

free(p);

}



程序2:

#include

#include

#include



voidmain(void)

{

inti;

intj;

intnum=0;

charp;//[5][12]

p=(char)malloc(5sizeof(char));



for(i=0;i<5;i++)

{

p[i]=malloc(12sizeof(char));

}



for(j=0;j<5;j++)

{

num=0;

for(i=0;i<12;i++)

{

p[j][i]=''a''+num;

num++;

}

}



for(j=0;j<5;j++)

{

for(i=0;i<12;i++)

{

printf("%c",p[j][i]);

}

printf("\n");

}



for(i=0;i<5;i++)

{

free(p[i]);

}

free(p);

}



程序3:

#include

#include

#include



voidmain(void)

{

charpStr;

inti,j,k;

//自己分配一个三维的[3][4][5]



pStr=(char)malloc(3sizeof(char)); //第一维



//分配二维的

for(i=0;i<3;i++)

{

(pStr+i)=malloc(4sizeof(char));

}



//分配三维

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

((pStr+i)+j)=malloc(5sizeof(char));

}

}



//使用分配的内存

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

for(k=0;k<5;k++)

{

pStr[i][j][k]=''a'';

printf("%c",pStr[i][j][k]);

}

printf("\n");

}

}



//释放第三维的内存

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

free((pStr[i][j]));

}

}



//释放第二维的内存

for(i=0;i<3;i++)

{

free(pStr[i]);

}



//释放第一维的内存

free(pStr);

}



感悟:动态分配给多维数组赋值时,只要对数组的概念弄清楚了,就基本上没太大问题,只要注意一个申请和释放的顺序就可以啦,他们的方向是相反的。数组就是一片连续的存储空间,在一片内存中按数组的一维的长度把内存分成若干个数据块。如果是二维的话,就把每个数据块按二维的长度分成若干个数据块。如果维数增加,就把数据块分得越细,内容越多,当然也越难管理。一般我们最多只定义三维。

进行动态分配时,按着数组的思路进行,从一维开始,一次下去,在最后一维之前时,要注意都要malloc(n4)。4是指针所占的长度.指针是地址,地址是整数,整数占四个字节。

献花(0)
+1
(本文系yangshiquan...首藏)