使用malloc分配具有不同行长度的多维数组我有以下C代码:int *a;size_t size = 2000*sizeof(int);a = (int *) malloc(size);哪个工作正常。但如果我有以下内容:char **b = malloc(2000*sizeof *b);每个元素b都有不同的长度。怎么可能b像我一样做同样的事情a; 即以下代码是否正确?char *c;size_t size = 2000*sizeof(char *);c = (char *) malloc(size);
3 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
首先,你需要分配像指针一样的数组char **c = malloc( N * sizeof( char* ))
,然后用一个单独的调用来分配每一行malloc
,可能在循环中:
/* N is the number of rows *//* note: c is char** */if (( c = malloc( N*sizeof( char* ))) == NULL ){ /* error */ }for ( i = 0; i < N; i++ ){ /* x_i here is the size of given row, no need to * multiply by sizeof( char ), it's always 1 */ if (( c[i] = malloc( x_i )) == NULL ) { /* error */ } /* probably init the row here */}/* access matrix elements: c[i] give you a pointer * to the row array, c[i][j] indexes an element */c[i][j] = 'a';
如果您知道元素的总数(例如N*M
),则可以在单个分配中执行此操作。
largeQ
TA贡献2039条经验 获得超7个赞
动态分配类型为T的NxM数组的典型形式是
T **a = malloc(sizeof *a * N);if (a){ for (i = 0; i < N; i++) { a[i] = malloc(sizeof *a[i] * M); }}
如果数组的每个元素具有不同的长度,则将M替换为该元素的适当长度; 例如
T **a = malloc(sizeof *a * N);if (a){ for (i = 0; i < N; i++) { a[i] = malloc(sizeof *a[i] * length_for_this_element); }}
慕桂英4014372
TA贡献1871条经验 获得超13个赞
等效存储器分配char a[10][20]
如下。
char **a;a=(char **) malloc(10*sizeof(char *));for(i=0;i<10;i++) a[i]=(char *) malloc(20*sizeof(char));
我希望这看起来很简单。
- 3 回答
- 0 关注
- 473 浏览
添加回答
举报
0/150
提交
取消