Alocare 4-dimensională a matricei: încălcarea accesului

Am scris această bucată simplă de cod pentru a aloca dinamic o matrice 4-dimensională:

#include 
#include 

int**** alloc() {

    int i,j,k;
    int ****matrix;
    int x,y,z,n_pairs;

    x= 62;
    y= 45;
    z= 28;
    n_pairs = 4;

    matrix = (int ****) malloc(x*sizeof(int***));

    for (i=0; i<62;i++)
        for(j=0;j<45;j++)
            for(k=0;k<28;k++)
                for(h=0;h<4;h++)
                    printf("%d\t",m[i][j][k][h]);

    system("pause");

    return 0;
}

problema este că acest cod are ca rezultat un Violarea accesului atunci când încerc să îl execut. Nu este modul corect de alocare/eliberare a unei matrice multidimensionale? Dacă da, atunci care este problema?

0
Vă rugăm să nu numiți acest lucru o matrice 4D, aceasta este doar o emulație a unei astfel de ființe. C are nivele N-dimensiale nativ. Sunt foarte ușor de folosit și evitați o parte din dificultățile întâlnite aici. int (A *) [4] [5] [23] = calloc (37 * sizeof * A);
adăugat autor Jens Gustedt, sursa

2 răspunsuri

O problemă este aici:

        for (k=0; k<----- This should read `k

Probabil ați vrut să introduceți codul z , nu la n_pairs .

0
adăugat
o astfel de eroare stupidă ... Îmi pare rău! Voi accepta răspunsul dvs. cât mai curând posibil
adăugat autor user1372813, sursa
@aix ar trebui să dai, probabil, un du-te la sniping, de asemenea :-)
adăugat autor Eitan T, sursa

dacă u face o matrice calea corectă este de a aloca toate nevoile de memorie u, apoi sa scufundat-l.

pentru 2.dim

#include 
#include 

int main(void)
{
  int i;
  int ** matrix;
  int rows = 10;
  int colums =10;


  matrix = (int**)malloc(rows*sizeof(int*));
  matrix[0] = (int*)malloc(rows*colums*sizeof(int));

  for(i =1; i

aceasta este pentru a avea o zonă de memorie continuă pentru matrice. acest lucru poate fi mai rapid

0
adăugat