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