- 26 Ene 2019
- 59
- 22
Hola a todos.
Estoy con un proyecto de la universidad y estoy desarrollando un modulo para dar de alta/baja usuarios y/o modificarlos pero o el programa crashea al intentar añadir usuarios ("return value 3221226356") o despues de añadirlo pasa lo de la imagen siguiente :
*Los nueve primeros usuarios vienen por defecto, sin embargo, el decimo lo añadi yo debiendo aparecer realmente 10.- a -[a a]*
Supongo que el problema se encuentra en el aumento de reserva de memoria en esta linea de codigo "db = (usuario*)realloc(db,(num+1)*sizeof(usuario)); " pero no estoy seguro.
Gracias de antemano.
Aqui el codigo :
Gracias.
Estoy con un proyecto de la universidad y estoy desarrollando un modulo para dar de alta/baja usuarios y/o modificarlos pero o el programa crashea al intentar añadir usuarios ("return value 3221226356") o despues de añadirlo pasa lo de la imagen siguiente :
*Los nueve primeros usuarios vienen por defecto, sin embargo, el decimo lo añadi yo debiendo aparecer realmente 10.- a -[a a]*
Supongo que el problema se encuentra en el aumento de reserva de memoria en esta linea de codigo "db = (usuario*)realloc(db,(num+1)*sizeof(usuario)); " pero no estoy seguro.
Gracias de antemano.
Aqui el codigo :
C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "memoria.h"
#include "admin_cliente.h"
/*PROTOTIPOS*/
void escribir(usuario*, int);
int altas(usuario*, int);
void bajas(usuario*, int);
void mod(usuario*, int);
/*FIN_PROTOTIPOS*/
void adm_cliente(usuario* db){
/*VARIABLES*/
int opc,n,nuevo,borrado;
/*INICIALIZACION*/
opc = 0;
nuevo = 0;
borrado = 0;
n = 0;
n = getmaxlength()+nuevo-borrado;
/*MENU ADMIN_CLIENTES*/
do{
n = getmaxlength()+nuevo-borrado-1;
system("cls");
fflush(stdin);
fflush(stdout);
printf("ADMINISTRACION CLIENTES");
printf("\n-----------\n");
fprintf(stdout,"| 1.Informacion clientes\n| 2.Altas\n| 3.Bajas\n| 4.Modificaciones\n| 5.Listas\n| 6.Buscar\n| 0.Salir\n");
printf("Introduzca opcion : ");
scanf("%i",&opc);
fflush(stdout);
switch (opc){
case 1:
escribir(db,n);
system("pause");
break;
case 2:
nuevo += altas(db,n);
n++;
break;
case 3:
bajas(db,n);
borrado+=1;
n--;
break;
case 4:
mod(db,n);
default:
return;
break;
}
}while(opc != 0);
}
void escribir(usuario* db, int n){
int i;
i=0;
fflush(stdout);
printf("Lista Clientes %i : \n",n);
for(i=0;i<=n;i++){
fflush(stdout);
//if(strcmp(db[i].type,"Cliente")==0)
printf(" > %i.%s - [%s %s] - i:%i\n",i,db[i].email,db[i].nombre,db[i].apellido,i);
}
}
int altas(usuario* db, int num){
db = (usuario*)realloc(db,(num+1)*sizeof(usuario));
if(db==NULL){
printf("Could not allocate memory");
exit(1);
}
char aux[15];
//num++;
fflush(stdin);
system("cls");
printf("Registro nuevo cliente : \n");
printf("\nEmail : ");
scanf("%s",aux);
strcpy(db[num].email,aux);
fflush(stdin);
printf("Contrase%ca : ",164);
scanf("%s",aux);
strcpy(db[num].pass,aux);
fflush(stdin);
printf("Nombre : ");
scanf("%s",aux);
strcpy(db[num].nombre,aux);
printf("Apellido : ");
fflush(stdin);
scanf("%s",aux);
strcpy(db[num].apellido,aux);
printf("Provincia : ");
fflush(stdin);
scanf("%s",aux);
strcpy(db[num].provincia,aux);
printf("Localidad : ");
fflush(stdin);
scanf("%s",aux);
strcpy(db[num].localidad,aux);
printf("Direccion : ");
scanf("%s",aux);
strcpy(db[num].direccion,aux);
fflush(stdin);
strcpy(db[num].type,"Cliente");
db[num].id = num;
printf("\nCliente ID : %i - Guardado -\n",num);
system("pause");
return 1;
}
void bajas(usuario* db, int n){
int del,i;
del=0;
system("cls");
escribir(db,n);
printf("Seleccione usuario : ");
scanf("%i",&del);
for(i=del;i<n;i++){
fflush(stdout);
strcpy(db[i].email,db[i+1].email);
fflush(stdout);
if((i+1)<n){
strcpy(db[i].nombre,db[i+1].nombre);
strcpy(db[i].apellido,db[i+1].apellido);
strcpy(db[i].provincia,db[i+1].provincia);
strcpy(db[i].localidad,db[i+1].localidad);
strcpy(db[i].direccion,db[i+1].direccion);
strcpy(db[i].type,db[i+1].type);
}
}
system("pause");
}
void mod(usuario* db,int n){
int m;
escribir(db,n);
printf("Selecciona usuario a modificar : ");
scanf("%i",&m);
}
Código:
Gracias.