动态内存分配结构数组中的矩阵

时间:2017-09-26 12:10:18

标签: c arrays dynamic structure allocation

我想制作一个结构数组,为结构和两个矩阵

动态分配内存
typedef struct {
    int **cont;
    double **doubmat;
} libra;

int main(int argc, char *argv[]) {

    libra *arra = calloc(Nfr,sizeof(libra));

    for (i = 0; i < Nfr; i++) {
        arra[i].doubmat = calloc(Nmol, sizeof (libra));
    }
    for (i = 0; i < Nfr; i++) {
        for (j = 0; j < Nmol; j++) arra[i].doubmat[j] = calloc(Nmol, sizeof (libra));
    }

    for (i = 0; i < Nfr; i++) {
        arra[i].cont = calloc(Nmol, sizeof (libra));
    }
    for (i = 0; i < Nfr; i++) {
        for (j = 0; j < Nmol; j++) arra[i].cont[j] = calloc(Nmol, sizeof (libra));
    }
    }

但我的内存有问题,计算过程中的数字取决于数组中的结构数量。我认为我在分配方面犯了一些错误。

任何人都有一些提示吗? 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

假设声明了NFrame,我将展示由Nframe个结构组成的数组的分配,每个结构包含Nrows x Ncols doubmat

typedef struct {
    int **cont;
    double **doubmat;
} libra;

int main(int argc, char *argv[]) {

    int i, j, Nrows = ..., Ncols = ...;
    libra *arra = calloc(Nframe, sizeof(libra));

    for (i = 0; i < Nframe; i++) {
        arra[i].doubmat = calloc(Nrows, sizeof(double*));
        if (arra[i].doubmat == NULL)
            return;
        for (j = 0; j < Nmol; j++){
            arra[i].doubmat[j] = calloc(Ncols, sizeof(double));
            if (arra[i].doubmat[j] == NULL)
                return;
        }
    }
}

答案 1 :(得分:0)

您指定了不正确的sizeof(type)来为矩阵分配内存。 你需要做那样的事情:

typedef struct {
    int **cont;
    double **doubmat;
} libra;

int main(int argc, char *argv[]) {

    libra *arra = calloc(Nframe,sizeof(libra));

    for (i = 0; i < Nfr; i++) {
        arra[i].doubmat = calloc(Nmol, sizeof(*arra[i].doubmat));
        for (j = 0; j < Nmol; j++)
            arra[i].doubmat[j] = calloc(Nmol, sizeof(**arra[i].doubmat));
    }

    for (i = 0; i < Nfr; i++) {
        arra[i].cont = calloc(Nmol, sizeof(*arra[i].cont));
        for (j = 0; j < Nmol; j++)
            arra[i].cont[j] = calloc(Nmol, sizeof(**arra[i].cont));
    }
}