我学习C.我有如下所示方案动态矩阵分配
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
int i, j, k, m, n;
double **x;
double **y;
printf("Enter a number as the size of two square matrices\n");
scanf("%d", &m);
x = (double**)malloc(m * sizeof(double));
y = (double**)malloc(m * sizeof(double));
/* initialize random seed: */
srand(time(NULL));
for(i = 0; i < m; i++) {
x[i] = (double*)malloc(m * sizeof(double));
y[i] = (double*)malloc(m * sizeof(double));
for(i = 0; i < m; i++) {
for(j = 0; j < m; j++) {
x[i][j] = rand();
y[i][j] = rand();
}
printf("\n");
}
}
printf("\n\n");
}
当运行此程序,动态创建并填充两个矩阵X和Y,在使用RAND()随机数的程序并给出2作为我的矩阵大小,我看到“Segmetation Fault”错误。请注意,这个想法是用double类型的随机元素填充这两个矩阵。让我知道如果上面的代码是正确的。
更正:EDIT1
x = (double**)malloc(m * sizeof(double*));
y = (double**)malloc(m * sizeof(double*));
/* initialize random seed: */
srand(time(NULL));
for(i = 0; i < m; i++) {
x[i] = (double*)malloc(m * sizeof(double));
y[i] = (double*)malloc(m * sizeof(double));
for(j = 0; j < m; j++) {
x[i][j] = rand();
y[i][j] = rand();
}
printf("\n");
}
printf("\n\n");
}
以上,现在正常工作。需要关于 的一些解释x =(double **)malloc(m * sizeof(double *)); 和 x [i] =(double *)malloc(m * sizeof(double)); (double *)malloc(m * sizeof(double *)); sizeof(double *)in x =(double **)
EDIT2
void main(){
int i, j, k, m, n;
printf("Enter a number as the size of two square matrices\n");
scanf("%d", &m);
double (*x)[m] = malloc(sizeof(double[m][m]));
double (*y)[m] = malloc(sizeof(double[m][m]));
/* initialize random seed: */
srand(time(NULL));
for(i = 0; i < m; i++) {
for(j = 0; j < m; j++) {
x[i][j] = rand();
y[i][j] = rand();
}
printf("\n");
}
printf("\n\n");
}
作为每改变延Gustedt矩阵分配...我已删除
double **x;
double **y;
x = (double**)malloc(m * sizeof(double*));
y = (double**)malloc(m * sizeof(double*));
x[i] = (double*)malloc(m * sizeof(double));
y[i] = (double*)malloc(m * sizeof(double));
不,这是不正确的。获得seg故障清楚地告诉您存在问题。建议您在调试器中运行程序和/或添加调试打印语句以尝试查找您的问题。你也可以看看这个问题中的“相关”链接。这种矩阵分配已经有很多次了。 – kaylum
user3121023感谢您指出。我添加了*并删除了内部循环。 –
@ user3121023你能解释一下行吗 x =(double **)malloc(m * sizeof(double));和x [i] =(double *)malloc(m * sizeof(double)); –