Sto prendendo una classe su C e si sta verificando un errore di segmentazione. Da quanto ho capito, si suppone che i guasti dei segmenti si verifichino quando si accede alla memoria che non è stata allocata, o comunque fuori dai limiti. Ovviamente tutto ciò che sto cercando di fare è inizializzare un array (anche se piuttosto grande)Seg Fault durante l'inizializzazione dell'array
Sto semplicemente fraintendendo come analizzare un array 2d? Misplacing un bound è esattamente ciò che causerebbe un errore di seg-- mi sbaglio nell'utilizzare un nidificato for-loop
per questo?
Il professore ha fornito le funzioni dell'orologio, quindi spero che non sia questo il problema. Sto eseguendo questo codice in Cygwin, potrebbe essere questo il problema? Segue il codice sorgente. Usando anche lo standard C99.
Per essere perfettamente chiari: sto cercando aiuto per capire (e eventualmente risolvere) il motivo per cui il mio codice produce un errore di seg.
#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;
}
Questa è una grande domanda per i compiti. Ben scritto, ben pensato e alcune risposte delle persone mi hanno effettivamente insegnato qualcosa che non sapevo (in particolare, impongono limiti alle dimensioni). Ti lodo per questo, OP. –
Non correlato alla tua domanda, ma visto che questo è compito a casa: sembra che il tuo primo 'start = time();' è nel posto sbagliato, dovrebbe essere appena prima del ciclo for, altrimenti il suo reset di ogni ciclo, non serve scopo – Necrolis