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

Problemas con apuntadores y estructuras

Estas en el tema de Problemas con apuntadores y estructuras en el foro de C/C++ en Foros del Web. buenas e tenido problemas con el espacio de memoria creo de un apuntador de estructura . tengo estos sub menus para ingresar mostrar y insertar ...
  #1 (permalink)  
Antiguo 21/06/2009, 14:56
 
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 15 años, 3 meses
Puntos: 1
Problemas con apuntadores y estructuras

buenas e tenido problemas con el espacio de memoria creo de un apuntador de estructura . tengo estos sub menus para ingresar mostrar y insertar datos.

Código asd:
Ver original
  1. #include <iostream.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <conio.c>
  6.  
  7.  
  8.  
  9. struct fecha
  10. {
  11.    int dd;
  12.    int mm;
  13.    char aaaa[10];
  14. };
  15.  
  16. struct direccion
  17. {
  18.    char dir[50];
  19.    char disto[50];
  20.    char prov[50];
  21.    char dpto[50];
  22.    char pais[50];
  23. };
  24.  
  25. struct persona
  26. {
  27.    char cod[50];
  28.    char ap[40];
  29.    char am[20];
  30.    char nom[50];
  31.    char sex[2];
  32.    int telf;
  33.    fecha fnac;
  34.    direccion dire;
  35. };
  36.  
  37. //declaracion de funciones
  38. //************************  
  39. int menu();
  40. void lecturapers(persona **p,int *dim,int *error);
  41. void mostrarpers(persona *p,int dim,int error);
  42. void insertar(persona **p,int *dim,int error);
  43.  
  44. int main()
  45. {     persona *p;
  46.       int opcion,np,opbus,e,datoint;
  47.       char cod[5],dato[50];
  48.       textbackground(15);
  49.       textcolor(0);
  50.       do{
  51.          opcion=menu();
  52.          switch(opcion)
  53.          {
  54.             case 1: lecturapers(&p,&np,&e);
  55.                     break;
  56.             case 2: mostrarpers(p,np,e);
  57.                     break;
  58.             case 3: insertar(&p,&np,e);
  59.                     break;
  60.         }
  61.      }while(opcion);
  62.  
  63. //Lectura de personas
  64. //*******************
  65. void lecturapers(persona **p,int *dim,int *error)
  66. {    
  67.      int i,j,k,l,n,condi=0,condi1=0;
  68.      char op,cod[5];
  69.      system("CLS");
  70.      gotoxy(29,2);cout<<"INGRESO DE PERSONAS";
  71.      gotoxy(29,3);cout<<"*******************\n\n";
  72.      cout<<"Numero de personas que desea ingresar:";cin>>n;
  73.      *p = (struct persona*) malloc (n*sizeof (struct persona));
  74.      if(*p==NULL)
  75.        {
  76.         cout<<"NO HAY ESPACIO..Dimension fuera de rango...\n\n"<<endl;
  77.         system("pause");
  78.         exit(1);
  79.        }
  80.  //RELLENO DE DATOS
  81. *dim=n;
  82.  *error=1;
  83. }
  84.  
  85.  
  86. void mostrarpers(persona *p,int dim,int error)
  87. {    
  88.      int i,x,y,z,w;  
  89.         system("cls");
  90.      //evita el error de mostrar sin crear
  91.      if(error!=1)
  92.      {
  93.        gotoxy(18,10);printf("'No haz ingresado datos o Haz vaciado el registro'");
  94.        gotoxy(30,11);printf(" El programa se cerrara");
  95.        gotoxy(40,25);system("pause");
  96.        exit(1);          
  97.      }
  98.      if(p==NULL)
  99.      {
  100.        printf("La Agenda esta vacia...\n\n");
  101.        
  102.      }
  103.      else
  104.      {
  105.         //VISUALIZACION DE DATOS    
  106.  
  107.       }
  108.      
  109. }
  110.  
  111. void insertar(persona **p,int *dim,int error)
  112. {
  113.     persona *y;  
  114.     int i,j,k,l,n,condi=0;
  115.     char op,cod[6];
  116.     system("cls");
  117.     if(error!=1)
  118.      {
  119.        gotoxy(18,10);printf("'No haz ingresado datos o Haz vaciado el registro'");
  120.        gotoxy(30,11);printf(" El programa se cerrara");
  121.        gotoxy(40,25);system("pause");
  122.        exit(1);          
  123.      }
  124.     n=*dim+1;
  125.     y =(struct persona*) realloc (*p,n*sizeof (struct persona));
  126.     if(y==NULL)
  127.     {
  128.        cout<<"NO HAY ESPACIO...dimension fuera de rango..."<<endl;
  129.        system("pause");
  130.        exit(1);
  131.     }  
  132.     for(i=0;i<*dim;i++)
  133.     {
  134.        y[i]=*p[i];
  135.     }  
  136.     //ACA DENTRO IRIA AGREGAR UN DATO (i)
  137.     *p=y;
  138.     *dim=n;
  139.     gotoxy(40,25);system("pause");
  140. }  
  141.  
  142. La cuestion es que inserta una vez el dato, luego pongo mostrar y todo bien pero cuando vuelvo a querer insertar me sale error(...a detectado un error y debe comprobarse)  y se cierra el programa, el problema creo que es en el espacio de memoria pero como lo soluciono ?? espero su ayuda . gracias
  #2 (permalink)  
Antiguo 21/06/2009, 15:28
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Problemas con apuntadores y estructuras

Usa el depurador para ver en que momento justo te da el error.

Que se supone que haces con los datos, los metes en un fichero? tienes que explicar más lo que haces, que el código, muchos gotoxy y poco de entenderse realmente, lo siento, pero por lo menos es lo que veo yo, hay que tratar en lo posible de usar nombres de variables que a simple vista signifiquen o indiquen cual es su función dentro del código.

Intenta hacerle un free() antes de volverle a dar memoria al puntero, y esta recomendación es al azar.

PD. tienes la pregunta final dentro del código..
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 06:56.