初始化二维数组

时间:2018-08-25 19:30:51

标签: c

我正在尝试创建一个未定义的2D m x m数组作为全局变量。但是输入m值后,我得到了

segmentation fail(core image dumped)

错误。谁能帮我这个?非常感谢你。这是我的代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double **A;

int main(void) {

    int m, i, j;

    scanf("%d", &m);

    A = (double **)malloc(m * m * sizeof(double));

    for (i = 0; i < m; i++) {
        for (j = 0; j < m; j++) {
            A[i][j] = i + j;
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果要以自己的方式分配大小为m * m的内存块,则需要使用单指针算术来访问元素。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double *A;

int main(void) {

    int m;
    scanf("%d", &m);

    A = malloc(m * m * sizeof(double));

    for (int i = 0; i < m; i++) {
        for(int j = 0; j < m; j++) {
            *(A + i * m + j) = i + j;
        }
    }

    return 0;
}

执行此操作的另一种方法是使用指针数组,其中每个指针都指向here中所述的大小为m的内存,或者检查下面的代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double **A;

int main(void) {

    int m;
    scanf("%d", &m) ;

    A = malloc(m * sizeof(double*));

    for(int i = 0; i < m; i++){
        A[i] = malloc(m * sizeof(double));
    }

    for (int i = 0; i < m; i++){
        for(int j = 0; j < m; j++){
            A[i][j] = i + j;
        }
    }

    return 0;
}