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#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