Código asd:
Ver original
#include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <conio.c> struct fecha { int dd; int mm; char aaaa[10]; }; struct direccion { char dir[50]; char disto[50]; char prov[50]; char dpto[50]; char pais[50]; }; struct persona { char cod[50]; char ap[40]; char am[20]; char nom[50]; char sex[2]; int telf; fecha fnac; direccion dire; }; //declaracion de funciones //************************ int menu(); void lecturapers(persona **p,int *dim,int *error); void mostrarpers(persona *p,int dim,int error); void insertar(persona **p,int *dim,int error); int main() { persona *p; int opcion,np,opbus,e,datoint; char cod[5],dato[50]; textbackground(15); textcolor(0); do{ opcion=menu(); switch(opcion) { case 1: lecturapers(&p,&np,&e); break; case 2: mostrarpers(p,np,e); break; case 3: insertar(&p,&np,e); break; } }while(opcion); //Lectura de personas //******************* void lecturapers(persona **p,int *dim,int *error) { int i,j,k,l,n,condi=0,condi1=0; char op,cod[5]; system("CLS"); gotoxy(29,2);cout<<"INGRESO DE PERSONAS"; gotoxy(29,3);cout<<"*******************\n\n"; cout<<"Numero de personas que desea ingresar:";cin>>n; *p = (struct persona*) malloc (n*sizeof (struct persona)); if(*p==NULL) { cout<<"NO HAY ESPACIO..Dimension fuera de rango...\n\n"<<endl; system("pause"); exit(1); } //RELLENO DE DATOS *dim=n; *error=1; } void mostrarpers(persona *p,int dim,int error) { int i,x,y,z,w; system("cls"); //evita el error de mostrar sin crear if(error!=1) { gotoxy(18,10);printf("'No haz ingresado datos o Haz vaciado el registro'"); gotoxy(30,11);printf(" El programa se cerrara"); gotoxy(40,25);system("pause"); exit(1); } if(p==NULL) { printf("La Agenda esta vacia...\n\n"); } else { //VISUALIZACION DE DATOS } } void insertar(persona **p,int *dim,int error) { persona *y; int i,j,k,l,n,condi=0; char op,cod[6]; system("cls"); if(error!=1) { gotoxy(18,10);printf("'No haz ingresado datos o Haz vaciado el registro'"); gotoxy(30,11);printf(" El programa se cerrara"); gotoxy(40,25);system("pause"); exit(1); } n=*dim+1; y =(struct persona*) realloc (*p,n*sizeof (struct persona)); if(y==NULL) { cout<<"NO HAY ESPACIO...dimension fuera de rango..."<<endl; system("pause"); exit(1); } for(i=0;i<*dim;i++) { y[i]=*p[i]; } //ACA DENTRO IRIA AGREGAR UN DATO (i) *p=y; *dim=n; gotoxy(40,25);system("pause"); } 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