OS Unix-like?
1) La matrice va allocata dinamicamente, devi quindi ricorrere alle relative funzioni di allocazione malloc() e deallocazione free().
2) L'algoritmo di ordinamento è sbagliato, oltretutto l'hai mai provato perchè cosi si dovrebbe schiantare visto che oltrepassi la porzione di memoria (che comunque non hai allocato) della matrice con j.
Prova a vedere questa soluzione, se puoi utilizzare la libreria standard, cosi come nel mio esempio, per l'ordinamento passi ogni riga della matrice (un vettore) a qsort(); diversamente devi implementarti tu l'algoritmo corretto. Dai un'occhiata su Wikipedia agli algoritmi: BubbleSort, InsertionSort, SelectionSort, HeapSort, MergeSort e QuickSort.
codice:
#include <stdio.h>
#include <stdlib.h>
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
void fillMatrix(int **matrix, int r, int c)
{
int i, j;
for(i = 0; i != r; ++i)
{
for(j = 0; j != c; ++j)
matrix[i][j] = rand() % 256;
}
}
void printMatrix(int **matrix, int r, int c)
{
int i, j;
for(i = 0; i != r; ++i)
{
for(j = 0; j != c; ++j)
printf("%d ", matrix[i][j]);
putchar('\n');
}
}
void sortMatrix(int **matrix, int r, int c)
{
int i;
for(i = 0; i != r; ++i)
qsort(matrix[i], c, sizeof(int), compare);
}
int main(int argc, char *argv[])
{
int c, r;
int i;
int **matrix;
printf("Inserisci il numero di righe della matrice: ");
scanf("%d*%c",&r);
printf("Inserisci il numero di colonne della matrice: ");
scanf("%d*%c",&c);
matrix = (int **) malloc(r * sizeof(int*));
for(i = 0; i != r; ++i)
matrix[i] = (int *) malloc(c * sizeof(int));
fillMatrix(matrix, r, c);
printf("\nMatrice originale:\n");
printMatrix(matrix, r, c);
printf("\nMatrice ordinata:\n");
sortMatrix(matrix, r, c);
printMatrix(matrix, r, c);
for(i = 0; i != r; ++i)
free(matrix[i]);
free(matrix);
getchar();
return 0;
}