Błąd błędu segmentacji w alokacji pamięci tablicy 3D

Mam zmienną wskaźnikaint ***a w C. przekazuję ją do funkcji jako&a np. odniesienie. W funkcji otrzymuję zmienną typu pointerint ****a. Przydzielam pamięć w ten sposób.

*a=(int***)malloc(no1*sizeof(int**));
some loop from 0 to no1
    (*a)[++l]=(int**)malloc((no1+1)*sizeof(int*));
some loop from 0 to no1
    (*a)[l][h]=(int*)malloc(2*sizeof(int));

To tylko czas, w którym przydzieliłem pamięć. Rzeczywisty program nie jest podany; nie ma tu błędu. Ale kiedy to zrobię:

(*a)[l][h][0]=no1;

Daje mi błąd „Segmentation Fault” i nie rozumiem dlaczego.

AKTUALIZACJA: Napisałem przykładowy program, który ma tylko przydzielić pamięć. Daje to również błąd błędu segmentacji.

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

void allocate(int ****a)
{
    int i,j,k;
    if(((*a)=(int***)malloc(5*sizeof(int**)))==NULL)
    {
        printf("\nError in allocation of double pointer array\n");
        exit(0);
    }
    for(i=0;i<5;i++)if(((*a)[i]=(int**)malloc(4*sizeof(int*)))==NULL)
    {
        printf("\nError in allocation of single pointer array on index [%d]\n",i);
        exit(0);
    }
    for(i=0;i<5;i++)
        for(j=0;j<4;i++)
            if(((*a)[i][j]=(int*)malloc(3*sizeof(int)))==NULL)
            {
                printf("\nError in allocation of array on index [%d][%d]\n",i,j);
                exit(0);
            }
    for(i=0;i<5;i++)
        for(j=0;j<4;i++)
            for(k=0;k<3;k++)
                (*a)[i][j][k]=k;
}

main()
{
    int ***a;
    int i,j,k;
    allocate(&a);
    for(i=0;i<5;i++)
        for(j=0;j<4;i++)
            for(k=0;k<3;k++)
                printf("\na[%d][%d][%d]  = %d ",i,j,k,a[i][j][k]);
}

questionAnswers(3)

yourAnswerToTheQuestion