使用malloc和指针在C中创建2个随机矩阵

时间:2018-02-17 05:04:42

标签: c arrays pointers matrix random

我有一个分配来创建两个大小为n的随机生成的矩阵(其中n = 4,16,32,64,128,256,512,1024,2048,4096,8192)并将这些矩阵相乘。

我正在使用malloc创建矩阵。我只使用long** intCreateMatrix(n) 用于创建矩阵AB的函数。此函数返回指向矩阵的指针。另一个功能 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函数初始化矩阵并打印矩阵并返回矩阵。

执行时ab应该有不同的值 但它们具有相同的值示例我正在为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 

这两个矩阵应该是不同的我不知道在哪里 我错了。你能指导我吗?

1 个答案:

答案 0 :(得分:1)

srand(int)用于播种伪随机数生成器。每次rand()播种相同的种子时,它必须生成相同的值序列。在调用rand()之前应该播种一次。它不应该 反复播种或重新播种。在srand(time(0));开始调用initializeMatrix之前,请致电main()

return语句编写代码无意义之后 - 控制永远不会到达那些行。你为什么要在那里释放它?完成工作后将其释放。您仍然需要它们来打印存储在那些动态分配的存储器中的值。

投放malloc是不必要的,但检查malloc的返回值不是。你应该检查它。