首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三维结构的内存分配

三维结构的内存分配
EN

Stack Overflow用户
提问于 2013-02-17 18:25:56
回答 1查看 41关注 0票数 1

在下面的代码中,我想包括结构的第三个维度。结构基因型和其余标识符已经定义。这是没有问题的:

代码语言:javascript
复制
struct genotype ** populationrows = (struct genotype **) calloc(MAXGENS, sizeof(struct genotype *));

  for (k=0; k< MAXGENS; k++) {

    populationrows[k]= (struct genotype *) calloc (POPSIZE, sizeof (struct genotype));  

    for (j=0; j<2; j++) {
      for (i=0; i<3; i++) { 
        populationrows[k][j].fitness = 0;
        populationrows[k][j].rfitness = 0;
        populationrows[k][j].cfitness = 0;
        populationrows[k][j].lower[i] = 1.0;
        populationrows[k][j].upper[i]= 2.0;
        populationrows[k][j].gene[i] = 3.0;
        printf(" populationrows[%u][%u].gene[%u]=%25lf \n", k,j,i,populationrows[k][j].gene[i]); 
      }
    }   
  }

对于第三个维度,我尝试了以下方法:

结构基因型*人口行=(结构基因型*) calloc(numFiles,sizeof(结构基因型* *) );

对于(w=0;w< numFiles;w++){

populationrowsw= (结构基因型**) calloc (MAXGENS,sizeof (结构基因型*));

代码语言:javascript
复制
for (k=0; k<MAXGENS; k++) {    
  for (j=0; j<2; j++) {
    for (i=0; i<3; i++) {   
      populationrows[w][k][j].fitness = 0;
      populationrows[w][k][j].rfitness = 0;
      populationrows[w][k][j].cfitness = 0;
      populationrows[w][k][j].lower[i] = 1.0;
      populationrows[w][k][j].upper[i]= 2.0;
      populationrows[w][k][j].gene[i] = 3.0;
      printf(" populationrows[%u][%u][%u].gene[%u]=%25lf \n", w,k,j,i,populationrows[w][k][j].gene[i]); 
    }
  }     
 }  
}

但这给了我一个分割错误。

您介意告诉我如何避免这种分割错误吗?任何帮助都将不胜感激。

提前感谢您的回复!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-17 18:58:19

我假设它是C。

与指向数据指针的指针数组相比,使用平面数组更好。大概是这样的:

代码语言:javascript
复制
int n_w = 42, n_k = 23, n_j = 423; // size of dimensions

struct genotype * population = (struct genotype *) calloc(n_w * n_k * n_j, sizeof(struct genotype));

您将获得元素(10,11,12),然后使用:

代码语言:javascript
复制
population[10 * n_k * n_j + 11 * n_j + 12].fitness = 0;

如果你把它放到函数中,它会变得很漂亮:

代码语言:javascript
复制
int n_w = 42, n_k = 23, n_j = 423; // size of dimensions

struct genotype * create_array() {
    return (struct genotype *) calloc(n_w * n_k * n_j, sizeof(struct genotype));
}

struct genotype * get_element(int w, int k, int j) {
    return &population[w * n_k * n_j + k * n_j + j];
}

// ...

struct genotype * population = create_array();

get_element(10, 11, 12)->fitness = 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14920105

复制
相关文章

相似问题

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