Estoy tomando una clase en C y me encuentro con un error de segmentación. Por lo que entiendo, se supone que las fallas seg ocurren cuando estás accediendo a la memoria que no ha sido asignada, o de otra manera fuera de los límites. "Por supuesto, todo lo que estoy tratando de hacer es inicializar una matriz (aunque bastante grande)Error de Seg al inicializar la matriz
¿Simplemente estoy malentendiendo cómo analizar una matriz 2d? La colocación errónea de un límite es exactamente lo que causaría un fallo seg. ¿Me equivoco al usar un for-loop
anidado para esto?
El profesor proporcionó las funciones del reloj, así que espero que ese no sea el problema. Estoy ejecutando este código en Cygwin, ¿podría ser ese el problema? El código fuente sigue Usando el estándar c99 también.
Para ser perfectamente claro: estoy buscando ayuda para entender (y finalmente arreglar) el motivo por el cual mi código produce un fallo 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;
}
Esta es una gran pregunta para la tarea. Bien escrito, bien pensado, y las respuestas de algunas personas en realidad me enseñaron algo que no sabía (específicamente límites de tamaño de la pila). Te felicito por esto, OP. –
No relacionado con tu pregunta, pero viendo que es tarea: parece que tu primer 'start = time();' está en el lugar equivocado, debería estar justo antes del ciclo for, de lo contrario, se restablecería cada ciclo, sin servicio propósito – Necrolis