Error Validacion de acceso a memoria
Publicado por Alvaro (1 intervención) el 22/01/2008 18:26:34
Hola!
¿Alguien me puede ayudar? Pretendo desarrollar un programa en C que implemente una de las muchas transformadas Wavelet que existen sobre una imagen, el caso es que el programa se compila perfectamente, pero da un error en tiempo de ejecución de "Validación de acceso a memoria (Fallo de segmentación) ocurrió en tu programa".
El código es :
#include <stdio.h>
#include <string.h>
struct array {
int length;
int *data;
};
void view (struct array* A);
void valores (struct array* A);
void dwtfoward (struct array* A);
void view (struct array* A)
{
int i = 0;
int size = A->length;
FILE *valores;
valores = fopen ("Transformada.txt", "w");
printf ("Funcion de presentacion de valores ");
while (i < size)
{
fprintf (valores, "A[%d] = %d ", i, A->data[i]);
i++;
}
fclose (valores);
}
void valores (struct array* A)
{
int i = 0;
int size = A->length;
FILE *foto;
foto = fopen ("Mouse.jpg", "rb");
if (!ferror(foto) && !feof(foto))
{
while (i < size)
{
A->data[i] = fgetc (foto);
i++;
}
}
fclose (foto);
}
void dwt(struct array* A)
{
int i = 0;
int* tmp = calloc(A->length,sizeof(int));
int len = A->length;
printf ("Comienzo del procesado DWT de los valores ");
while (i < len)
{
tmp[i] = A->data[(i<<1)+1]+ ((A->data[(i<<1)+4] + A->data[(i<<1)-2])>>4)-9*(A->data[(i<<1)+2]+A->data[(i<<1)])+0.5;
A->data[i] = A->data[(i<<2)]+((tmp[i]+tmp[i-1])>>2)+0.5;
i++;
}
/*while (i < (len >> 1) )
{
tmp[(i<<1)+1] = (A->data[(i<<1)] + A->data[(i<<1)+1]) >> 1;
tmp[(i<<1)] = A->data[(i<<1)] - tmp[(i<<1)+1];
i++;
}
i=0;
while (i < (len >> 1) )
{
A->data[i] = tmp[(i<<1)+1];
A->data[(len>>1)+i] = tmp[(i<<1)];
i++;
}*/
free (tmp);
}
int main (void)
{
FILE *pf;
int a=0, size=0, x=0;
struct array* localData;
printf(" ******************* ");
printf(" * INICIO PROGRAMA * ");
printf(" ******************* ");
//Averiguar el tamaño de la variable size, para asociarlo con length
pf = fopen ("Mouse.jpg", "rb");
while (!ferror(pf) && !feof(pf))
{
a = fgetc (pf);
size++;
}
//Sabemos que se tiene que cargar en una matriz de size elementos el valor
//de cada uno de ellos.
localData = calloc (size+1, sizeof (int));
localData->length = size;
valores(localData);
dwt(localData);
view(localData);
fclose (pf);
printf ("El tamaño de size es: %d ", size);
system ("PAUSE");
}
Espero que me podáis ayudar.
MUCHAS GRACIAS.
¿Alguien me puede ayudar? Pretendo desarrollar un programa en C que implemente una de las muchas transformadas Wavelet que existen sobre una imagen, el caso es que el programa se compila perfectamente, pero da un error en tiempo de ejecución de "Validación de acceso a memoria (Fallo de segmentación) ocurrió en tu programa".
El código es :
#include <stdio.h>
#include <string.h>
struct array {
int length;
int *data;
};
void view (struct array* A);
void valores (struct array* A);
void dwtfoward (struct array* A);
void view (struct array* A)
{
int i = 0;
int size = A->length;
FILE *valores;
valores = fopen ("Transformada.txt", "w");
printf ("Funcion de presentacion de valores ");
while (i < size)
{
fprintf (valores, "A[%d] = %d ", i, A->data[i]);
i++;
}
fclose (valores);
}
void valores (struct array* A)
{
int i = 0;
int size = A->length;
FILE *foto;
foto = fopen ("Mouse.jpg", "rb");
if (!ferror(foto) && !feof(foto))
{
while (i < size)
{
A->data[i] = fgetc (foto);
i++;
}
}
fclose (foto);
}
void dwt(struct array* A)
{
int i = 0;
int* tmp = calloc(A->length,sizeof(int));
int len = A->length;
printf ("Comienzo del procesado DWT de los valores ");
while (i < len)
{
tmp[i] = A->data[(i<<1)+1]+ ((A->data[(i<<1)+4] + A->data[(i<<1)-2])>>4)-9*(A->data[(i<<1)+2]+A->data[(i<<1)])+0.5;
A->data[i] = A->data[(i<<2)]+((tmp[i]+tmp[i-1])>>2)+0.5;
i++;
}
/*while (i < (len >> 1) )
{
tmp[(i<<1)+1] = (A->data[(i<<1)] + A->data[(i<<1)+1]) >> 1;
tmp[(i<<1)] = A->data[(i<<1)] - tmp[(i<<1)+1];
i++;
}
i=0;
while (i < (len >> 1) )
{
A->data[i] = tmp[(i<<1)+1];
A->data[(len>>1)+i] = tmp[(i<<1)];
i++;
}*/
free (tmp);
}
int main (void)
{
FILE *pf;
int a=0, size=0, x=0;
struct array* localData;
printf(" ******************* ");
printf(" * INICIO PROGRAMA * ");
printf(" ******************* ");
//Averiguar el tamaño de la variable size, para asociarlo con length
pf = fopen ("Mouse.jpg", "rb");
while (!ferror(pf) && !feof(pf))
{
a = fgetc (pf);
size++;
}
//Sabemos que se tiene que cargar en una matriz de size elementos el valor
//de cada uno de ellos.
localData = calloc (size+1, sizeof (int));
localData->length = size;
valores(localData);
dwt(localData);
view(localData);
fclose (pf);
printf ("El tamaño de size es: %d ", size);
system ("PAUSE");
}
Espero que me podáis ayudar.
MUCHAS GRACIAS.
Valora esta pregunta


0