Myśle, że alkokacja pamięci zawarta w tym kodzie będzie bardziej przystępna dla Ciebie, jeżeli chodzi o zrozumienie:
#include <stdio.h>
#include <malloc.h>
using namespace std;
int main(void){
// Deklaracja zmiennych
int wier, col;
int **tab;
// Pobranie danych
printf("Wiersze: ");
scanf("%d", &wier);
printf("\nKolumny: ");
scanf("%d", &col);
// Alokacja pamięci dla tablicy dwuwymiarowej
tab=(int**)malloc(wier*sizeof(int*)); // alokacja pamięci dla wierszy
for(int i=0; i<wier; i++)
tab[i]=(int*)malloc(col*sizeof(int)); // alokacja pamięci dla kolumn
// Przypisanie wartości
for(int i=0 ; i<wier ; i++)
for(int j=0 ; j<col ; j++)
tab[i][j] = 5;
// Wypisywanie wartości
for(int i=0 ; i<wier ; i++){
for(int j=0 ; j<col ; j++){
printf("%d", tab[i][j]);
}
printf("\n");
}
// Czyszczenie pamięci
for(int i=0; i<col; i++)
free(tab[i]);
free(tab);
return 0;
}