首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用malloc分配不同行长度的多维数组?

使用malloc分配不同行长度的多维数组?
EN

Stack Overflow用户
提问于 2018-04-25 01:26:42
回答 2查看 0关注 0票数 0

我有以下C代码:

代码语言:javascript
复制
int *a;
size_t size = 2000*sizeof(int);
a = (int *) malloc(size);

这工作正常。但是,如果我有以下内容:

代码语言:javascript
复制
char **b = malloc(2000*sizeof *b);

每个元素b都有不同的长度。

如何对b做像我对a所做的一样的事情?即下面的代码是否有误?

代码语言:javascript
复制
char *c;
size_t size = 2000*sizeof(char *);
c = (char *) malloc(size);
EN

回答 2

Stack Overflow用户

发布于 2018-04-25 09:49:35

代码语言:txt
复制
/* 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';
票数 0
EN

Stack Overflow用户

发布于 2018-04-25 11:21:10

动态分配类型T的NxM数组的典型形式是

代码语言:javascript
复制
T **a = malloc(sizeof *a * N);
if (a)
{
  for (i = 0; i < N; i++)
  {
    a[i] = malloc(sizeof *a[i] * M);
  }
}

如果数组中的每个元素具有不同的长度,则用该元素的适当长度替换M; 例如

代码语言:javascript
复制
T **a = malloc(sizeof *a * N);
if (a)
{
  for (i = 0; i < N; i++)
  {
    a[i] = malloc(sizeof *a[i] * length_for_this_element);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档