Autor Tema: seguimos co la definiciones  (Leído 2745 veces)

Desconectado capsx

  • Newbie
  • *
  • Mensajes: 4
seguimos co la definiciones
« en: 21 de Marzo de 2005, 06:17:03 pm »
al ejecutar el siguiente codigo me da segmentation faul alguien me podsria decir porq es:

struct mensaje{
  char nombre[80];
  int borrar;
  int tamano;
};
 
struct buzonmensajes{
  int nummensajes;
  int mensporborrar;
  long tamanobuzon;
  FILE *fich;
  struct mensaje vectormensajes[100];
};

struct buzonmensajes buzon;

for (int i=0;i<20;i++){

strcpy(buzon.vectormensajes.nombre,nombre);
         
buzon.vectormensajes.tamano=tam;
}
         
Habra q reservar memoria? hago masl la asignacion? no lo se estoy basetante perdido si me pudieseis ayudar os lo agradeceria mucho.

Desconectado BuHo

  • Pro Member
  • ****
  • Mensajes: 733
    • La Estancia Azul
seguimos co la definiciones
« Respuesta #1 en: 23 de Marzo de 2005, 03:14:31 am »
Código: [Seleccionar]
strcpy(buzon.vectormensajes[i].nombre,nombre);

el ultimo nombre, de donde lo copias???? No esta declarado en el codigo.

Y otra cosa, no estas programando en ANSI C.

En C no puedes declarar variables una vez has empezado la seccion de instrucciones. Te lo digo por eso de:

for (int i=0;  ...; ...)
Wake up BuHo...
Daboweb has you[/color]
Mi blog: La Estancia Azul

Desconectado capsx

  • Newbie
  • *
  • Mensajes: 4
seguimos co la definiciones
« Respuesta #2 en: 23 de Marzo de 2005, 09:51:33 am »
Es que lo que os puse es solo un resumen del codigo de una funcion la función entera es la siguiente por si asi lo veis mejor y me podeis ayudar:

#include <string.h>
#include <sys/types.h>
#include <sys/file.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>

struct mensaje{
  char nombre[80];
  int borrar;
  int tamano;
};
 
struct buzonmensajes{
  int nummensajes;
  int mensporborrar;
  long tamanobuzon;
  FILE *fich;
  struct mensaje vectormensajes[100];
};

**********************



int iniciobuzon(){

   struct dirent* elemento;
   int i = 0;
   char *nombre;
   char *aux;
   long tam;
   int numelementos=0;
   struct mensaje mens;

   // Abrimos el directorio mail
   DIR* inbox = opendir("mail");
   if (inbox == NULL)
      return 0;

   
   for (elemento=readdir(inbox); elemento!=NULL; elemento=readdir(inbox))
      numelementos++;
   
       rewinddir(inbox);
      
   // Creamos el buzón con los mensajes
   inicializarbuzon(numelementos-2);
   
   // Lo bloqueamos
   if(!bloquearbuzon()){
      return 0;
   }

   // Recorremos el contenido del directorio
      
   elemento = readdir(inbox);
   
   
   while (elemento!=NULL)
   {
      nombre=elemento->d_name;
      
      // No contamos con los directorio . y ..
      if ( nombre!="." && nombre!=".." ){   
      
         printf("el nombre del fichero es%s\n",nombre);         
         
         tam = tamanofich("mail", nombre);
         if (tam<0)
         {
            return 0;
         }
         buzon.tamanobuzon+=tam;
         buzon.vectormensajes.tamano=tam;
         printf("Empezamos a rellenar el vuzon\n");   
         strcpy(aux,"mail/");
         
         
         strcat(buzon.vectormensajes.nombre,nombre);
         
         printf("rellenamos el mensaje\n");
         buzon.vectormensajes.tamano=tam;
         
         

         i++;
      }

      elemento = readdir(inbox);
   }

   // Cerramos la lectura del directorio
   closedir(inbox);
   return 1;
}

muchas gracias por contestarme.

Desconectado jirho

  • Member
  • ***
  • Mensajes: 303
seguimos co la definiciones
« Respuesta #3 en: 05 de Abril de 2005, 06:27:09 pm »
...cuando usas punteros lo mas conveniente es iniciaizarlos en NULL, no veo mas errores... :wink: ...
[root@local_host jirho]#Conecting to underground zone...:superman:

http://www.hackeando.com/gifs/logomini.gif

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License