Título: Ayuda! Por favor. Tengo problema con memoria dinámica en c++ y función getline Publicado por: DeathStar92 en 25 Noviembre 2012, 19:56 pm Hola, estoy diseñando un programa en POO que lea calificaciones de alumnos de tres periodos y luego calcule su promedio. Quiero que cuando se lean las calificaciones aparezca en nombre de cada alumno, pero hay un problema con la memoria dinámica :S, aquí está mi código....
#include <iostream.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <math.h> #include <string.h> #include <fstream.h> class MATRIX; class Alumnos { private: int i,k, temp, m; public: int n; char **Arreglo; Alumnos(){n=0; m=0;} Alumnos(int F, int Long) { n=F; m=Long; Arreglo=new char *[n]; for(i=0;i<=n;i++) Arreglo=new char [m]; } void LeeCadena() { cout<<endl<<"El arreglo a ordenar es : "<<endl; for(i=1;i<=n;i++) { cout<<"Alumno "<<i<<" :"; gets(Arreglo); } } void OrdenaCadena() { for(i=1;i<n;i++) for(k=1;k<n;k++) { temp=strcmp (Arreglo[k], Arreglo[k+1]); if(temp > 0) { strcpy (Arreglo[0],Arreglo[k]); strcpy (Arreglo[k],Arreglo[k+1]); strcpy (Arreglo[k+1],Arreglo[0]); } } } void GuardaCadena() { ofstream archivo; archivo.open("E:/Nombres.txt"); for(i=1;i<=n;i++) archivo<<Arreglo<<endl; archivo.close(); } void VerCadena() { // cout<<endl<<" Los nombres ordenados son: "<<endl; for(i=1;i<=n;i++) cout<<Arreglo<<endl; } void RecuperaCad() { ifstream archivo("E:/Nombres.txt"); while (!archivo.eof()) { for(i=0;i<=n;i++) archivo.getline(Arreglo,m); } } void LiberaMemoriaCad() { for (i=0; i<=n;i++) delete[]Arreglo; delete[]Arreglo; } friend class MATRIX; }; class MATRIX { private: int Fil, Col, i, j, x; double **M; public: MATRIX(){Fil=0; Col=0;} MATRIX(int F, int C) { Fil=F; Col=C; M=new double *[Fil]; if(M==NULL) {cout<<"No hay MD"; getch(); exit(0); } for(i=0;i<Fil;i++) M=new double[Col]; for(i=0;i<Fil;i++) if (M==NULL) {cout<<"No hay MD"; getch(); exit(0); } for(i=0;i<Fil;i++) for(j=0; j<Col; j++) M[j]=0.0; } Alumnos obj; // void LeeX(){cin>>x;} void Lee_Mtz() { cout<<"Alumno: "; obj.RecuperaCad(); for(i=0;i<=obj.n;i++) cout<<obj.Arreglo; { for(i=0;i<Fil;i++) { for(j=0;j<Col;j++) { cout<<"M["<<i<<"]["<<j<<"]= "; cin>>M[j]; } } } } void Ver_Mtz() { for(int i=0; i<Fil;i++) {cout<<endl; for(int j=0;j<Col;j++) cout<<M[j]<<" "; } } void LiberaMem() { for(int i=0;i<Fil;i++) delete []M; delete []M; } void PromedioPorMateria() { for(int i=0; i<Fil;i++) for(int j=0;j<Col;j++) M[j]=(M[j])/3; } void GuardaParcial1() { ofstream archivo; archivo.open("E:/Parcial1.txt"); for(i=0; i<Fil;i++) for(j=0; j<Col;j++) archivo<<M[j]<<endl; cout<<"Datos almacenados..."<<endl; archivo.close(); } void GuardaParcial2() { ofstream archivo; archivo.open("E:/Parcial2.txt"); for(i=0; i<Fil;i++) for(j=0; j<Col;j++) archivo<<M[j]<<endl; cout<<"Datos almacenados..."<<endl; archivo.close(); } void GuardaParcial3() { ofstream archivo; archivo.open("E:/Parcial3.txt"); for(i=0; i<Fil;i++) for(j=0; j<Col;j++) archivo<<M[j]<<endl; cout<<"Datos almacenados..."<<endl; archivo.close(); } void GuardaPromedio() { ofstream archivo; archivo.open("E:/PromedioPorMateria.txt"); for(i=0; i<Fil;i++) for(j=0; j<Col;j++) archivo<<M[j]<<endl; cout<<"Datos almacenados..."<<endl; archivo.close(); } void RecuperaParcial1() { ifstream archivo("E:/Parcial1.txt"); do { for (int i=0;i<Fil;i++) for (int j=0;j<Col;j++) archivo >> M[j]; }while (!archivo.eof()); } void RecuperaParcial2() { ifstream archivo("E:/Parcial2.txt"); do { for (int i=0;i<Fil;i++) for (int j=0;j<Col;j++) archivo >> M[j]; }while (!archivo.eof()); } void RecuperaParcial3() { ifstream archivo("E:/Parcial3.txt"); do { for (int i=0;i<Fil;i++) for (int j=0;j<Col;j++) archivo >> M[j]; }while (!archivo.eof()); } void RecuperaPromedio() { ifstream archivo("E:/PromedioPorMateria.txt"); do { for (int i=0;i<Fil;i++) for (int j=0;j<Col;j++) archivo >> M[j]; }while (!archivo.eof()); } MATRIX operator+(MATRIX M1) { MATRIX ObjAux(Fil, Col); for(i=0; i<Fil;i++) for(j=0; j<Col;j++) ObjAux.M[j]=M[j]+M1.M[j]; return ObjAux; } }; void main() { int F, C, Long; C=6; Long=50; cout<<"cuantas alumnos? ";cin>>F; Alumnos Obj1(F, Long); MATRIX M1(F,C), M2(F,C), M3(F,C),M4(F,C), M5(F,C); Obj1.LeeCadena(); Obj1.OrdenaCadena(); Obj1.VerCadena(); Obj1.GuardaCadena(); M1.Lee_Mtz(); M2.Lee_Mtz(); M3.Lee_Mtz(); M1.GuardaParcial1(); M2.GuardaParcial2(); M3.GuardaParcial3(); M4=M1+M2; M5=M3+M4; M5.PromedioPorMateria(); M1.Ver_Mtz(); cout<<endl; M2.Ver_Mtz(); cout<<endl; M3.Ver_Mtz(); cout<<endl; M5.Ver_Mtz(); cout<<endl<<endl; getch(); M1.LiberaMem(); M2.LiberaMem(); M3.LiberaMem(); M4.LiberaMem(); M5.LiberaMem(); } |