Seg Fehler beim Initialisieren des Arrays

Ich nehme eine Klasse für C und stoße auf einen Segmentierungsfehler. Soweit ich weiß, sollten Seg-Fehler auftreten, wenn Sie auf Speicher zugreifen, der nicht zugewiesen wurde, oder wenn er sich außerhalb des zulässigen Bereichs befindet. Natürlich versuche ich nur, ein Array zu initialisieren (wenn auch ziemlich groß)

Bin ich einfach missverstanden, wie man ein 2d Array parst? Ein fehlerhaftes Platzieren einer Grenze ist genau das, was einen Seg-Fehler verursachen würdfor-loop dafür

Der Professor hat die Uhrfunktionen bereitgestellt, daher hoffe ich, dass das nicht das Problem ist. Ich führe diesen Code in Cygwin aus. Könnte das das Problem sein? Der Quellcode folgt. Verwenden Sie auch den c99-Standard.

Um ganz klar zu sein: Ich suche nach Hilfe, um den Grund zu verstehen (und schließlich zu beheben), warum mein Code einen Seg-Fehler erzeugt.

#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;

}

Antworten auf die Frage(12)

Ihre Antwort auf die Frage