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]);
}