Я беру урок на C и сталкиваюсь с ошибкой сегментации.Из того, что я понимаю, ошибки сегмента должны возникать, когда вы обращаетесь к памяти, которая не была выделена, или иным образом за пределами.Конечно, все, что я пытаюсь сделать, это инициализировать массив (хотя и довольно большой)
Я просто неправильно понимаю, как анализировать 2d массив?Неправильное наложение границы - это именно то, что может вызвать ошибку сегмента - я ошибаюсь, используя для этого вложенный for-loop
?
Профессор предоставил функции часов, так что я надеюсь, что это не проблема.Я запускаю этот код в 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;
}