我有一个分配来创建两个大小为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
和Initialises矩阵的函数。
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
这两个矩阵应该是不同的我不知道在哪里 我错了。你能指导我吗?
答案 0 :(得分:1)
srand(int)
用于播种伪随机数生成器。每次rand()
播种相同的种子时,它必须生成相同的值序列。在调用rand()
之前应该播种一次。它不应该
反复播种或重新播种。在srand(time(0));
开始调用initializeMatrix
之前,请致电main()
。
在return
语句编写代码无意义之后 - 控制永远不会到达那些行。你为什么要在那里释放它?完成工作后将其释放。您仍然需要它们来打印存储在那些动态分配的存储器中的值。
投放malloc
是不必要的,但检查malloc
的返回值不是。你应该检查它。