SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Rombus en Domingo 12 de Octubre de 2008, 04:43

Título: Problema con gcc
Publicado por: Rombus en Domingo 12 de Octubre de 2008, 04:43
Hola gente!

estube aberiguando sobre la funcion memcpy, ya que siempre tengo problemas de fallos de segmentacion y encontre un codigo de ejemplo en la pagina de c con clase.

el codigo es el siguiente:

Código: C
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define LEN1 7
  5. #define LEN2 5
  6.  
  7. int main(void){
  8.     char a[LEN1] = "abcdefg";
  9.     char *ptr;
  10.     int i;
  11.  
  12.     memcpy(ptr, a, LEN1);
  13.    
  14.     for(i=0; i<LEN1; i++)
  15.         printf( "a[%d]=%c ", i, a[i] );
  16.        
  17.     printf("n");
  18.    
  19.     for(i=0; i<LEN2; i++)
  20.         printf( "ptr[%d]=%c ", i, ptr[i] );
  21.        
  22.     printf("n");
  23.    
  24.    return 0;
  25. }
  26.  
  27.  

deberia de andar, ya que parece bastante razonable y a parte esta en c con clase que es una pagina bastante confiable...

el problema es que en mi gcc desde ubuntu me tira un segmentation fault en el memcpy

alguien sabe a q se debe esto?

gracias de antemano!
Título: Re: Problema con gcc
Publicado por: robbie110487 en Domingo 12 de Octubre de 2008, 06:25
Hola, prueba en vez de declarar a ptr como puntero, declararlo como un arreglo de caracteres, algo asi:
Código: Text
  1. char ptr[LEN1]
  2.  
Asi deberia funcionar.

Saludos
Título: Re: Problema con gcc
Publicado por: Eternal Idol en Domingo 12 de Octubre de 2008, 13:44
Si, ahi ptr apunta a una direccion indefinida, otra opcion (incluyendo stdlib.h):

Código: Text
  1. char *ptr = (char*)malloc(LEN1 + 1);
  2.  

PD. LEN1 esta mal (por eso tengo que hacer LEN1 + 1), tiene que ser 8 para que haya espacio para el terminador de cadena. Mejor usar char a[] = "abcdefg"; y despues sizeof(a) para obtener lo que seria LEN1.
Título: Re: Problema con gcc
Publicado por: Rombus en Domingo 12 de Octubre de 2008, 23:18
ahh!!

y sigo con el problema de asignarle cosas a memoria no definida XD


che, pero que mal los de C con clase al poner ese codigo.

o en otros compiladores anda?

gracias por las respuestas!!
Título: Re: Problema con gcc
Publicado por: Eternal Idol en Lunes 13 de Octubre de 2008, 00:23
Cita de: "Rombus"
ahh!!

y sigo con el problema de asignarle cosas a memoria no definida XD


che, pero que mal los de C con clase al poner ese codigo.

o en otros compiladores anda?

gracias por las respuestas!!

¿Donde esta exactamente ese codigo? No deberia funcionar correctamente independientemente del compilador (si funciona es por casualidad), es mas el VC++ no te lo compila siquiera por el tema del terminador de cadena que no entra en un array de ese tamaño.
Título: Re: Problema con gcc
Publicado por: Rombus en Lunes 13 de Octubre de 2008, 02:08
esta acà: http://www.conclase.net/c/librerias/fun ... fun=memcpy (http://www.conclase.net/c/librerias/funcion.php?fun=memcpy" onclick="window.open(this.href);return false;)

yo le agregue un par de cosas para ver si funcionaba, pero el codigo en si es el mismo.
carece de la asignacion.

habia otro tambien q me daba error...

ahora no me acuerdo cual era.


si, tiene sentido pensar q no ande en ningun lado, pq estas asignando algo a ul lugar de memoria que es basura.

habria que mandarles un mail o comunicarse de alguna forma para que lo arreglen los de c con clase, que tiene toda la onda esa pag XD
Título: Re: Problema con gcc
Publicado por: Eternal Idol en Lunes 13 de Octubre de 2008, 08:10
En fin, pesimo codigo por lo anteriormente expuesto  :bad:
Título: Re: Problema con gcc
Publicado por: ProfesorX en Lunes 13 de Octubre de 2008, 17:41
Vaya, tambien revise la pagina y que mal.

Es una lastima que los de C con clase no hayan notado un error de ese tamaño  :blink:
Título: Re: Problema con gcc
Publicado por: Rombus en Lunes 13 de Octubre de 2008, 19:32
si la verdad...

voy a ver si me puedo poner en contacto para que lo corrigan


gracias por las respuestas! :good: