Salve a tutti, riesco a ordinare un array monodimensionale ma non capisco proprio perchè non riesca a ordinare un array tridimensionale. Si blocca in fase di runtime e non capisco proprio il motivo 
Vi posto il codice..
PS ho creato una funzione che mi inizializza i dati di input
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#define MAX_CIFRE 4 // numeri compresi tra 0 e 999
#define RADICE_SIZE 10
#define IS_FULL(ptr) (!ptr)
#define IS_EMPY(ptr) (!ptr)
#define MAX 5000
#define MAX_CIFRE 4 // numeri compresi tra 0 e 999
#define RADICE_SIZE 10
#define IS_FULL(ptr) (!ptr)
#define IS_EMPY(ptr) (!ptr)
#define ITERAZIONI 7
#define DIMENSIONE_MAX_LISTA 5000
typedef struct list_node *list_pointer;
typedef struct list_node {
int chiave[MAX_CIFRE];
list_pointer link;
}lista;
int dimensioni[]= {50,100,200,500,1000,2000,5000};
void creazione_dati (int testa[][ITERAZIONI][DIMENSIONE_MAX_LISTA]);
void scambia(int *x,int *y);
void sort_inserzione(int lista[][ITERAZIONI][DIMENSIONE_MAX_LISTA],int m,int n);
main(){
randomize();
printf("\nEsercitazione numero 23\n");
int i,j,k;
int testa[4][7][DIMENSIONE_MAX_LISTA];
//****************************************************************************
//****************************************************************************
//****************************************************************************
//*************************ORDINAMENTO PER SELEZIONE**************************
//****************************************************************************
//****************************************************************************
//****************************************************************************
creazione_dati (testa);
//### ARRAY ORDINATO #################################################*SELEZIONE
for(i=0;i<50;i++)printf("testa[0][0][i]");
for(i=0;i<4;i++)
for(j=0;j<7;j++)
sort_inserzione(testa,i,j);
for(i=0;i<50;i++)printf("testa[0][0][i]");
}
void sort_inserzione(int lista[][ITERAZIONI][DIMENSIONE_MAX_LISTA],int m,int n)
{
int i,j;
int prossimo;
n = dimensioni[n];
for(i=1;i<n;i++)
{
prossimo=lista[m][n][i];
for(j=i-1;j>=0 && prossimo<lista[m][n][j];j--)
lista[m][n][j+1] = lista[m][n][j];
lista[m][n][j+1] = prossimo;
}