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

Problema con memcpy

Estas en el tema de Problema con memcpy en el foro de C/C++ en Foros del Web. Tengo esta instruccion: memcpy( &( *pt_fichas )[ *nr_fichas ], bd_fichas, sizeof( Ficha ) * ( SQLROWS - *nr_fichas ) ); donde: pt_fichas = puntero de ...
  #1 (permalink)  
Antiguo 12/11/2007, 09:52
 
Fecha de Ingreso: abril-2007
Mensajes: 9
Antigüedad: 17 años, 8 meses
Puntos: 0
Problema con memcpy

Tengo esta instruccion:
memcpy( &( *pt_fichas )[ *nr_fichas ], bd_fichas, sizeof( Ficha ) * ( SQLROWS - *nr_fichas ) );

donde:

pt_fichas = puntero de tipo Ficha (Ficha es un struct con 12 campos que corresponden a los de una tabla de la BD)
nr_fichas = long con valor actual 0
bd_fichas = variable tipo Ficha (Ficha es un struct con 12 campos que corresponden a los de una tabla de la BD)
SQLROWS= Numero de filas que ha devuelto el cursor que previamente he cargado.

Esta instruccion hace que salte un error : Memory Fault (core dumped)

No tengo ni idea que es lo que hago mal ...
  #2 (permalink)  
Antiguo 12/11/2007, 10:20
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: Problema con memcpy

¿bd_fichas no deberia ser un puntero?
¿pt_fichas es un puntero doble?
Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 12/11/2007, 10:22
 
Fecha de Ingreso: abril-2007
Mensajes: 9
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Problema con memcpy

¿bd_fichas no deberia ser un puntero?

Es la variable de tipo struct sobre la que acabo de cargar los datos que se copiaran

¿pt_fichas es un puntero doble?

Es un puntero doble pq lo he recibido por referencia en la funcion

NO ESTOY SEGURO DE QUE ESTO SEA ASI ....
  #4 (permalink)  
Antiguo 12/11/2007, 13:48
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: Problema con memcpy

Entonces debes pasar la dirección de esa variable, te recomiendo que veas la definición de memcpy, esta función recibe 2 punteros y la cantidad de bytes a copiar.

Prácticamente te estoy ayudando a ciegas porque no vero la declaración de las variables ni el código suficiente como para decirte donde podría estar el error.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 13/11/2007, 02:59
 
Fecha de Ingreso: abril-2007
Mensajes: 9
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Problema con memcpy

Aqui te dejo la parte de la funcion , en la ultima parte esta el memcpy que da el error ...

int
fch_obtenerFichasModificadas( Ficha **pt_fichas,
long *nr_fichas )
{


EXEC SQL BEGIN DECLARE SECTION;

Ficha bd_fichas[DEFAULT_ARRAYSIZE];
FichaInd bi_fichas[DEFAULT_ARRAYSIZE];

EXEC SQL END DECLARE SECTION;



int rs;

EXEC SQL DECLARE BD_PAOL_MODP CURSOR FOR
SELECT ID_FICHA,
CE_FICHA,
CT_FICHA,
TX_CALLE,
NU_VIA,
DI_RESTO,
TO_CHAR( FE_MODI_REG, 'YYYYMMDD' ),
TO_CHAR( FE_CREA_REG, 'YYYYMMDD' ),
NO_PROG_ACT,
ID_USUA_LDAP,
CT_VIA,
DE_FICHA,
'',
NO_COMERCIAL,
NC_TELEFONO,
NC_FAX
FROM TAP_FICA
WHERE CR_MODI_PRODU = '1'
AND CR_BAJA_REG = '0';

if ( !pt_fichas || !nr_fichas )
return FCH_ERRDB_RAISE( E_FCH_BADPARAM );

*pt_fichas = NULL;
*nr_fichas = 0;

EXEC SQL AT BD_MODI
OPEN BD_PAOL_MODP;

if ( SQLCODE )
return FCH_ERRDB_RAISE( E_FCH_SQL_OPENMODP );

rs = E_FCH_NONE;

do
{

memset( bd_fichas, 0, sizeof( bd_fichas ) );


EXEC SQL AT BD_MODI
FETCH BD_PAOL_MODP
INTO :bd_fichas;


if ( SQLCODE < 0 )
{
rs = FCH_ERRDB_RAISE( E_FCH_SQL_FETCHMODP );
break;
}

if ( SQLROWS - *nr_fichas == 0 )
break;

*pt_fichas = (Ficha *)
realloc( *pt_fichas, sizeof( Ficha ) * SQLROWS );

if ( !*pt_fichas )
{
rs = FCH_ERRDB_RAISE( E_FCH_SYSMEM );
break;
}

memcpy( &( *pt_fichas )[ *nr_fichas ],
bd_fichas,
sizeof( Ficha ) * ( SQLROWS - *nr_fichas ) );


*nr_fichas = SQLROWS;

}
while ( !SQLCODE );
  #6 (permalink)  
Antiguo 13/11/2007, 08:59
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: Problema con memcpy

Verifica que el tamaño de bytes que estás copiando sea el adecuado en la línea del memcpy.

P.D. Te recomiendo que pongas el código usando las etiquetas CODE, para que sea más legible
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
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 17:57.