Nếu dùng c++ thì bạn dùng toán tử new cấp phát sẽ đơn giản đi rất nhiều
int **a=new int*[n];
for(int i=0;i<n;++i)
a[i]=new int[m];
Còn với hàm malloc trong C thì cũng tuơng tự
int **a=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;++i)
a[i]=(int*)malloc(m*sizeof(int))