gpt4 book ai didi

c - 初始化一个二维数组

转载 作者:行者123 更新时间:2023-11-30 19:04:31 25 4
gpt4 key购买 nike

我正在尝试创建一个未定义的 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;
}

最佳答案

如果您想按自己的方式分配大小为 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;
}

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

#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;
}

关于c - 初始化一个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com