我的任务是创建两个随机生成的大小为 n
的矩阵(其中 n
= 4, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192)并将这些矩阵相乘。
我正在使用 malloc
创建矩阵。我只使用 long** intCreateMatrix(n)
函数来创建两个矩阵 A
和B
。该函数返回一个指向矩阵的指针。另一个功能
long** intInitializeMatirx(a,n)
用于用随机值初始化矩阵。
当我为两个不同的矩阵调用这些函数时,它会为两个矩阵打印相同的矩阵内容。代码如下:
void intAlgo(int n,int algo){
long **a;
long **b;
long **c;
a = intCreateMatrix(n);
printf("Matrix A:\n");
a = intInitializeMatrix(a,n);
b = intCreateMatrix(n);
printf("Matrix B:\n");
b = intInitializeMatrix(b,n);
}
long** intCreateMatrix(int n){
long **arr;
int i,j;
arr = (long **)malloc(n * sizeof(long *));
for (i=0; i<n; i++)
arr[i] = (long *)malloc(n * sizeof(long));
return arr;
}
long** intInitializeMatrix(long **arr,int n){
int i,j;
srand(time(0));
for(i=0;i<n;i++){
for(j=0;j<n;j++)
arr[i][j] = rand()%10;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
printf("%ld ",arr[i][j]);
printf("\n");
}
printf("\n");
return arr;
free (arr);
}
intAlgo
是调用 createMatrix
的函数并初始化矩阵。
CreateMAtrix
将 n 作为输入并返回指向使用 malloc
创建的矩阵的指针.
InitialiseMatrix
使用 rand 函数初始化矩阵并打印矩阵并返回矩阵。
当我执行它时a
和b
应该有不同的值
但它们具有相同的值,例如我得到 Matrix A
的这些值和‘B? :
矩阵A
:
0 7 2 3
0 6 3 1
7 2 0 2
6 3 2 6
矩阵B
:
0 7 2 3
0 6 3 1
7 2 0 2
6 3 2 6
这两个矩阵应该不同,我不确定在哪里 我走错了。你能指导一下吗?
最佳答案
srand(int)
用于为伪随机数生成器提供种子。每次 rand()
使用相同的种子进行播种时,它必须产生相同的值序列。它应该在调用rand()
之前播种一次。不应该是
反复播种或重新播种。在 main()
中开始调用 initializeMatrix
之前,先调用 srand(time(0));
一次。
此外,在 return
语句之后编写代码是没有意义的 - 控制永远不会到达这些行。为什么你想在那里释放它?使用完后将其释放。您仍然需要它们来打印存储在那些动态分配的内存中的值。
强制转换 malloc
是不必要的,但检查 malloc
的返回值则不需要。你应该检查一下。
关于使用 malloc 和指针在 C 中创建 2 个随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48838044/