malloc动态分配多维数组
下面試自己寫的三個測試程序,如果看懂了基本上動態分配多維數組就沒什么問題啦:重點 1:深刻理解多維數組的概念,多維數組在內存中的分配情況,基本上動態分配也沒什么問題的。然后還要注意一點的就是,釋放是分配的逆過程!!!
?
#include <stdio.h>
#include <malloc.h>
#include <string.h>
?
void main(void)
{
???????int i ;
???????char (*p)[12] ; //[5][12]
???????p = malloc(5 * sizeof(char ) * 12);?????//申請5行的地址空間
?
???????for(i = 0 ; i < 5 ; i++)
???????{
??????????????strcpy(*(p + i), "hello");
???????}
?
???????for(i = 0 ; i < 5 ;i++)
???????{
??????????????printf("%s\n" , *(p + i));
???????}
???????free(p);
}
?
程序2:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
?
void main(void)
{
???????int i;
???????int j ;
???????int num = 0 ;
???????char **p ;//[5][12]
???????p =(char **) malloc( 5 * sizeof(char *) );??????????
?
???????for(i = 0 ; i < 5 ; i++)
???????{
??????????????p[i] = malloc(12 * sizeof(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 <stdio.h>
#include <malloc.h>
#include <string.h>
?
void main(void)
{
???????char ***pStr;
???????int i , j , k ;
???????//?自己分配一個三維的[3][4][5]
??????
???????pStr = (char ***)malloc(3 * sizeof(char **));??????//第一維
??????
???????//分配二維的
???????for(i = 0 ; i < 3 ; i++)
???????{
??????????????*(pStr + i) = malloc(4 * sizeof(char *));
???????}
?
???????//分配三維
???????for(i = 0 ; i < 3 ; i++)
???????{
??????????????for(j = 0 ; j < 4 ; j++)
??????????????{
?????????????????????*(*(pStr + i) + j) = malloc(5 * sizeof(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);
}
轉載于:https://www.cnblogs.com/bohaoist/p/4607194.html
總結
以上是生活随笔為你收集整理的malloc动态分配多维数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下线程创建
- 下一篇: mysql主从 1050错误