Reserva de Memoria en SXUB
Manuel Luis Aranda Luque
a4680580@ns.vlc.servicom.es
Tue, 09 Dec 1997 12:51:06 +0100
Estoy tratando de enlazar perl con librerias de C.
Expongo un problema concreto mediante un ejemplo.
Quiero utilizar desde perl la funcion strcat de C que sigue la siguiente
sintaxis:
#include <string.h>
char *strcat(char *dest, const char *src);
Esta funcion de C añade el string src al string dest sobreecribiendo el
caracter '\0' que hay
al final de dest, y añadiendo un caracter de terminación '\0' al final. El
string dest debe tener
suficiente espacio para el resultado.
1) Ejecutamos el comando h2xs -A -n Prueba
2) Editamos el fichero Prueba.xs
...
...
#include "XSUB.h"
#include <string.h>
#ifdef __cplusplus
...
...
MODULE = Prueba PACKAGE = Prueba
char *
strcat(dest,src)
char *dest
char *src
OUTPUT:
RETVAL
3) Editamos el fichero Prueba.pm
...
...
@EXPORT(Prueba);
...
...
4) Ejecutamos perl Makefile.PL
5) Ejecutamos make
6) Editamos el fichero test.pl
...
...
BEGIN { $| = 1; print "1..2\n"; }
...
...
$destino = "Destino";
$origen = "Origen";
print Prueba::strcat($destino,$origen);
7) Ejecutamos make test
El resultado será:
...
1..2
ok 1
DestinoOrigen
Pero si en el fichero test.pl llenamos $origen con una cadena larga se
producirá el error
make: *** [test_dynamic] Segmentation fault (core dumped) debido a que no
se ha reservado
memoria para el string de resultado destino.
¿Como se realiza la reserva de memoria para eliminar el problema?
¿Código alternativo?
Gracias,
Manuel Luis Aranda Luque