Dev - C++ - Error Validacion de acceso a memoria

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error Validacion de acceso a memoria

Publicado por Leo (19 intervenciones) el 27/01/2008 03:53:09
Le reservas memoria para el arreglo al puntero a estructura, eso esta mal.
Asi es:

localData = calloc (1, sizeof (struct array)); // o malloc(sizeof(struct array))
localData->data = calloc(size+1,sizeof(int)

Entiendes??

Suerte!!
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar