Foros del Web » Programación para mayores de 30 ;) » C/C++ »

exception access violation

Estas en el tema de exception access violation en el foro de C/C++ en Foros del Web. Buenas y gracias antes que nada. Tengo un programa que reserva memoria con 'malloc' para una serie de estructuras. Sin parar la ejecución de este ...
  #1 (permalink)  
Antiguo 17/05/2011, 06:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años, 6 meses
Puntos: 0
exception access violation

Buenas y gracias antes que nada.

Tengo un programa que reserva memoria con 'malloc' para una serie de estructuras. Sin parar la ejecución de este programa, un segundo programa intenta acceder a esta memoria para recuperar el valor de un campo de la estructura. En este momento me da el error del título.

¿Teoricamente se puede hacer? De no ser así.. .¿cómo lo hago? Si paro el primer programa se libera la memoria ¿verdad?

un saludo y gracias de nuevo.
  #2 (permalink)  
Antiguo 17/05/2011, 19:40
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: exception access violation

cuando dices un segundo programa, es literalmente un segundo programa o es un thread dentro del proceso??

En que sistema operativo estas y pone parte del codigo porque magos no somos.
  #3 (permalink)  
Antiguo 18/05/2011, 01:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: exception access violation

Ok, paso a dar más datos de el problema:
Estoy en Windows XP trabajando con Visual Studio 2010. El segundo programa es un programa totalmente independiente.

Aquí un ejemplo de las estructuras; son 8 estructuras distintas que las enlazo según convenga y que en el campo "senalX_tipo_dato" guardo el código de la estructura que voy a enlazar a continuación.

typedef struct campodato1 {
char senal1_nombre[60];
char senal1_nombre_var[60];
char senal1_modo_io[15];
char senal1_tipo_dato[15];
int valor1;
int next_nodo1;
struct campodato1 *siguiente1;
}nodo1;


Y la reserva de memoria la hago tal que así:

nuevo_elemento1 = (nodo1 *) malloc ( sizeof (nodo1));
if (nuevo_elemento1 == NULL)
return -1;


Desde este mismo programa guardo en un fichero el puntero a la primera estructura, así como el tipo de estructura que es, para desde el segundo programa poder empezar a recorrerlas.

El segundo programa es realmente una dll llamada desde un programa escrito en ADA.

El acceso de la dll es muy simple en la prueba realizada porque pregunta por la primera estructura alocada. Cogemos la dirección de momoria guardada en el fichero, el tipo de estructura, convertimos la dirección de memoria en un puntero del tipo "nodo1" (lo guardamos en "actual1"), y al lanzar el "if" da el error.
Tambien he probado a displayar una de las variable y me vuelve a dar el mismo error. PROGRAM_ERROR : EXCEPTION_ACCESS_VIOLATION

(cadena1, 2 y 3 son los datos con los que llama ADA a la dll y se corresponden con esos campos de las estructuras.)

if (strcmp(actual1->senal1_nombre_var, cadena1) == 0 &&
strcmp(actual1->senal1_equipo, cadena2) == 0 &&
strcmp(actual1->senal1_modo_io, cadena3) == 0)


Gracias por el interés.

Etiquetas: access, exception
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:28.