Seg Fault при инициализации массива

Я беру класс на C и сталкиваюсь с ошибкой сегментации. Насколько я понимаю, сбои сегментов должны возникать, когда вы обращаетесь к памяти, которая не была выделена, или иначе вне пределов. «Конечно, все, что я пытаюсь сделать, это инициализировать массив (хотя и довольно большой)

Я просто не понимаю, как анализировать 2-мерный массив? Неправильная установка границы - это именно то, что может вызвать ошибку сегмента - я ошибаюсь, используя для этого вложенный цикл for ?

Профессор предоставил функции часов, поэтому я надеюсь, что это не проблема. Я запускаю этот код в Cygwin, может быть, в этом проблема? Исходный код следует. Также используется стандарт c99.

Для ясности: мне нужна помощь в понимании (и, в конечном итоге, исправлении) причины, по которой мой код вызывает ошибку сегмента.

#include <stdio.h>
#include <time.h>
int main(void){
   //first define the array and two doubles to count elapsed seconds.   
   double rowMajor, colMajor;
   rowMajor = colMajor = 0;
   int majorArray [1000][1000] = {};

   clock_t start, end;

   //set it up to perform the test 100 times.
   for(int k = 0; k<10; k++)
   {
   start=clock();
   //first we do row major
   for(int i = 0; i < 1000; i++)
   {
       for(int j = 0; j<1000; j++)
       {
           majorArray[i][j] = 314;
       }
   }
   end=clock();
   rowMajor+= (end-start)/(double)CLOCKS_PER_SEC;
   //at this point, we've only done rowMajor, so elapsed = rowMajor
   start=clock();
   //now we do column major
     for(int i = 0; i < 1000; i++)
   {
       for(int j = 0; j<1000; j++)
       {
           majorArray[j][i] = 314;
       }
   }
   end=clock();
   colMajor += (end-start)/(double)CLOCKS_PER_SEC;
   }
   //now that we've done the calculations 100 times, we can compare the values.
   printf("Row major took %f seconds\n", rowMajor);
   printf("Column major took %f seconds\n", colMajor);
   if(rowMajor<colMajor)
   {
     printf("Row major is faster\n");
   }
   else
   {
      printf("Column major is faster\n");
   }

   return 0;

}
8
задан Bill the Lizard 20 September 2012 в 12:41
поделиться