为了账号安全,请及时绑定邮箱和手机立即绑定

使用malloc分配具有不同行长度的多维数组

使用malloc分配具有不同行长度的多维数组

C
明月笑刀无情 2019-08-08 15:26:38
使用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),则可以在单个分配中执行此操作。


查看完整回答
反对 回复 2019-08-08
?
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);
  }}


查看完整回答
反对 回复 2019-08-08
?
慕桂英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));

我希望这看起来很简单。


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信