Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/06/2009, 14:56
xdunkelheitx
 
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 16 años
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