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

标签 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 的函数并初始化矩阵。

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 

这两个矩阵应该不同,我不确定在哪里 我走错了。你能指导一下吗?

最佳答案

srand(int) 用于为伪随机数生成器提供种子。每次 rand() 使用相同的种子进行播种时,它必须产生相同的值序列。它应该在调用rand()之前播种一次。不应该是 反复播种或重新播种。在 main() 中开始调用 initializeMatrix 之前,先调用 srand(time(0)); 一次。

此外,在 return 语句之后编写代码是没有意义的 - 控制永远不会到达这些行。为什么你想在那里释放它?使用完后将其释放。您仍然需要它们来打印存储在那些动态分配的内存中的值。

强制转换 malloc 是不必要的,但检查 malloc 的返回值则不需要。你应该检查一下。

关于使用 malloc 和指针在 C 中创建 2 个随机矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48838044/

相关文章:

php - wordpress 中的 add_action 函数

c - Node js 与 C 的比较

c - C 中的 NaN 文字?

arrays - PostgreSQL 选择复合元素数组

javascript - 如何在 javascript 中使用 html 标签?

c++ - memcpy vs for 循环 - 从指针复制数组的正确方法是什么?

c++ - 在 C++ 中处理指针和 vector

C regexec 段错误

c - 我正在尝试使用 C 编码从 linux 制作 uniq 命令

C netbeans错误