Segmentation fault en 3ª iteración de un bucle
Publicado por Eloy (2 intervenciones) el 31/03/2014 00:33:31
El fallo me lo da el bucle en su 3ª iteración (sólo he pegado código relevante).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "vectordinamico.h"
#include "quicksort.h"
/*
*
*/
void inicializaVectorRand(vectorP v1){
unsigned long posicion1;
TELEMENTO valor;
for (posicion1=0;posicion1<tamano(v1);posicion1++){
valor=(rand()%500);
asignar(&v1,posicion1,valor);
}
}
int main(int argc, char** argv) {
FILE *q, *s;
clock_t inicio=-1, fin=-1; /*calculo de tiempos*/
vectorP v1; /*el vector*/
int hora=time(NULL); /*factor usado como semilla de rand()*/
unsigned long i; /*índice*/
short creado=0, ronda=0; /*Valores de control*/
srand(hora);
if((q = fopen("quicksort.txt", "w+"))==NULL) printf("El archivo quicksort.txt no ha podido crearse\n\n");
else printf("quicksort.txt creado con exito.\n\n");
for(i=10000;i<100001;i=i+10000){
if(creado==1){ liberar(&v1); creado = 0;}
crear(&v1, i); creado = 1;
inicializaVectorRand(v1);
inicio = clock();
quicksort(&v1, 0, i-1);
fin = clock();
printf("n=%u\tt(n)=%lf\n", i, (fin-inicio)/(double)CLOCKS_PER_SEC);
fprintf(q, "n=%u\tt(n)=%lf\n", i, (fin-inicio)/(double)CLOCKS_PER_SEC);
liberar(&v1); creado = 0;
printf("QSbucle: %d\n", ronda);
ronda++;
}
printf("Quicksort terminado.\n");
if(fclose(q)!=0) printf("Error al cerrar el archivo quicksort.txt\n\n");
else printf("quicksort.txt cerrado con exito\n\n");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdlib.h>
#include <stdio.h>
typedef int TELEMENTO;
typedef struct {
TELEMENTO *datos; /*valores del vector*/
unsigned long tam; /*tamaño del vector*/
}STVECTOR; /*definición de la estructura*/
typedef STVECTOR *vectorP; /*puntero a estructura*/
/*Función crear: asigna memoria y devuelve la asignación al
vector*/
void crear(vectorP *v1,unsigned long tam1)
{
unsigned long i=0;
*v1=(vectorP)malloc(sizeof(STVECTOR));
(*v1)->datos=(TELEMENTO*)malloc(tam1*sizeof(TELEMENTO));
(*v1)->tam=tam1;
for(i=0; i < tam1; i++)
*((*v1)->datos+i) = 0; //Inicialización a 0
}
/*Función asignar: Llena una posición del vector con un valor*/
void asignar(vectorP *v1,unsigned long posicion, TELEMENTO valor)
{
*((*v1)->datos+posicion)=valor;
}
void liberar(vectorP *v1){
free((*v1)->datos);
free(*v1);
}
void recuperar(vectorP v1, unsigned long posicion, TELEMENTO *E){
*E=*((v1)->datos+posicion);
}
unsigned long tamano(vectorP v1){
return v1->tam;
}
void swap (vectorP *v, unsigned long a, unsigned long b){
TELEMENTO aux;
aux = *((*v)->datos+a);
*((*v)->datos+a) = *((*v)->datos+b);
*((*v)->datos+b) = aux;
}
No entiendo por qué me da el fallo en la 3ª it y en las anteriores no. Espero que podáis ayudarme.
Gracias por la atención a los que hayáis leído.
Valora esta pregunta


0