首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c++中使用calloc为三维数组分配内存

如何在c++中使用calloc为三维数组分配内存
EN

Stack Overflow用户
提问于 2016-09-05 10:49:24
回答 3查看 491关注 0票数 1

我想为c++中的3d数组分配内存,就像..。

代码语言:javascript
复制
typedef struct {
int id;int use;
}slotstruct;
slotstruct slot1[3][100][1500];  // This should be 3d array
for(i=0;i<3;i++){
  for(j=0;j<100;j++){
     for(k=0;k<1500;k++){
         slot1[i][j][k] = (slotstruct *)calloc(1,sizeof(slotstruct));
      }
   }
}

我使用过这段代码,但我得到了分段错误..

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-05 12:23:23

首先计算所需内存总量,然后为主数组和子数组分配内存,如下所示。不会造成分割错误。甚至您也可以检查地址,它们也是连续的。试试下面的代码,它对我来说很好:

代码语言:javascript
复制
typedef struct
{
int id;
int use;
}slotstruct;

main()
{
        int i,j,k;
        char row=2 ,col =3, var=3;
        //char **a=(char**)malloc(col*sizeof(char*));
        slotstruct*** a =(slotstruct***)calloc(col,sizeof(slotstruct*));

        for(i=0;i<col;i++)
                a[i]=(slotstruct**)calloc(row,sizeof(slotstruct*));

        for(i=0;i<col;i++)
                for(j=0;j<row;j++)
                        a[i][j]=(slotstruct*)calloc(var,sizeof(slotstruct*));


        int cnt=0;
        for( i=0;i<col;i++)
                for( j=0;j<row;j++)
                {
                        for(k=0;k<var;k++)
                                a[i][j][k].id=cnt++;
                }

        for(i=0;i<col;i++)
                for(j=0;j<row;j++)
                {
                        for(k=0;k<var;k++)
                                printf("%d ",a[i][j][k].id);
                                printf("%u ",&a[i][j][k]);
                        printf("\n");
                }
}
票数 0
EN

Stack Overflow用户

发布于 2016-09-05 10:53:01

代码语言:javascript
复制
slotstruct ( *slot1 )[100][1500];

slot1 = calloc( 1, 3 * sizeof( *slot1 ) ); 

或者尝试下面这样的方法

代码语言:javascript
复制
slotstruct ***slot1;

slot1 = malloc( 3 * sizeof( slotstruct ** ) );

for ( int i = 0; i < 3; i++ )
{ 
    slot1[i] = malloc( 100 * sizeof( slotstruct * ) );
    for ( int j = 0; j < 100; j++ )
    {
        slot1[i][j] = calloc( 1, 1500 * sizeof( slotstruct ) );
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-09-05 10:52:45

当你写到

代码语言:javascript
复制
slotstruct slot1[3][100][1500]

你是想写跟帖吗?

代码语言:javascript
复制
slotstruct ***slot1
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39328990

复制
相关文章

相似问题

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