gpt4 book ai didi

c - 动态矩阵分配程序

转载 作者:行者123 更新时间:2023-11-30 17:10:35 25 4
gpt4 key购买 nike

我正在学习 C。我有一个程序,可以使用 rand() 动态创建和填充两个矩阵 X 和 Y,并使用随机数,如下所示

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

当我运行这个程序并给出 2 作为矩阵大小时,我看到“段错误”错误。请注意,这个想法是用 double 类型的随机元素填充两个矩阵。让我知道上面的代码是否正确。

更正:编辑1

 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));

为什么 * for sizeof(double*) in x = (double**)malloc(m * sizeof(double*));

编辑2

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");
}

根据 Jens 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));

最佳答案

这些只是假矩阵,这项技术属于博物馆。在现代 C 语言中,从 C99 开始,只需将 2D 矩阵分配为 double (*matrix)[m] = malloc(sizeof(double[m][m])); 。因此您只需调用 malloc 一次即可整个矩阵并将其全部存储在连续的内存中。
– 延斯·古斯特

关于c - 动态矩阵分配程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813713/

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