I have a task of creating a matrix, that is the size of NxN, where N is a given parameter.
The matrix should be filled with random 0s and 1s.
I have tried the following code:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <sys/wait.h>
#include <pthread.h>
int** createMatr(int N){
    int** matr[10][10];
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            int rnd = rand() % 2;
            matr[i][j] = rnd;
        }
    }
    return matr;
}
void setValMatr(int N, int** matr[][10], int** newMatr[][10]){
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            newMatr[i][j] = matr[i][j];
        }
    }
}
void printMatr(int N, int** matr[][10]){
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++){
            printf("%d ",matr[i][j]);
        }
        printf("\n");
    }
}
int main(int argc, char* argv[]){
    if(argc!=2){
        perror("parameter error\n");
    }
    int N = atoi(argv[1]);
    int** matrix[10][10];
    int** helper[10][10];
    
    setValMatr(N,createMatr(N), matrix);
    setValMatr(N,matrix,helper);
    printMatr(N, matrix);
    return 0;
}
The compilation warnings this gives me are:
┌──(kali㉿kali)-[~/Desktop/Cprog/Linux2_Lab2]
└─$ gcc gvim2135_L2_1.c -o p
gvim2135_L2_1.c: In function ‘createMatr’:
gvim2135_L2_1.c:15:24: warning: assignment to ‘int **’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
   15 |             matr[i][j] = rnd;
      |                        ^
gvim2135_L2_1.c:18:12: warning: returning ‘int ** (*)[10]’ from a function with incompatible return type ‘int **’ [-Wincompatible-pointer-types]
   18 |     return matr;
      |            ^~~~
gvim2135_L2_1.c:18:12: warning: function returns address of local variable [-Wreturn-local-addr]
gvim2135_L2_1.c: In function ‘main’:
gvim2135_L2_1.c:47:18: warning: passing argument 2 of ‘setValMatr’ from incompatible pointer type [-Wincompatible-pointer-types]
   47 |     setValMatr(N,createMatr(N), matrix);
      |                  ^~~~~~~~~~~~~
      |                  |
      |                  int **
gvim2135_L2_1.c:21:30: note: expected ‘int ** (*)[10]’ but argument is of type ‘int **’
   21 | void setValMatr(int N, int** matr[][10], int** newMatr[][10]){
      |                        ~~~~~~^~~~~~~~~~
After running I get the error:
Segmentation fault
 
     
    