Malloc'ed 3D массив генерирует нарушение доступа к данным - PullRequest
1 голос
/ 11 января 2012

У меня есть malloc'ed 3d-массив двойных чисел в C, который генерирует ошибку нарушения доступа к данным при доступе через индексы.

Функция выделения: (упрощенная версия, не проверяющая нулевые значения или освобождающая при ошибках)

 #define DIMENSIONA 50
 #define DIMENSIONB 30
 #define DIMENSIONC 2

 double *** Array;

 void InitialiseDataStructure(void)
 {
 int Counter = 0;
 int PointCounter = 0;  

 Array = (double ***)malloc(DIMENSIONA * (sizeof(double**)));   

 for (Counter = 0; Counter < DIMENSIONA; Counter++)
   {               
      Array[Counter] = (double **)malloc(DIMENSIONB * sizeof(double *));                                  

      for (PointCounter = 0; PointCounter < DIMENSIONB; PointCounter++)
      {          
           Array[Counter][PointCounter] = (double *)malloc(DIMENSIONC * sizeof(double));

      }

   }
 }

Затем доступ к массиву осуществляется следующим образом:

 Array[x][y][z] = 0;

Это генерирует ошибку нарушения доступа к данным и завершает программу.

Я прочитал, попробовал и пришел к выводу - я тупой.Пожалуйста, помогите !!!

1 Ответ

2 голосов
/ 11 января 2012

Что такое POINTS_PER_GEOFENCE в следующем цикле for?

  for (PointCounter = 0; PointCounter < POINTS_PER_GEOFENCE; PointCounter++)

Разве это не должно быть

Array = malloc(DIMENSIONA * (sizeof(double**)));   
for (Counter = 0; Counter < DIMENSIONA; Counter++) {               
      Array[Counter] = malloc(DIMENSIONB * sizeof(double *));                                  
      for (PointCounter = 0; PointCounter < DIMENSIONB; PointCounter++) {     
          Array[Counter][PointCounter] = malloc(DIMENSIONC * sizeof(double));
      }
}

Примечание:

  • Прочитайте this для приведения возвращаемого значения malloc().
  • Перед использованием этого необходимо проверить, вернулись ли malloc() успехи и неудачи.
...