Salve a tutti ragazzi, sto implementando questo esercizio di esame di Programmazione a Oggetti, ho un problema molto strano, il programma compila il tutto ma poi quando lo eseguo, mi restituisce "Windows ha smesso di funzionare" ed eclipse mi restituisce questo errore what:: std bad_alloc..
A cosa è dovuto?
Consigli, soluzioni,migliorie al codice,critiche è tutto ben accettato... Grazie a tutti in anticipo...
Vi allego i file del mio esercizio...
#include <iostream>
#include <vector>
#include <list>
#include<cstdlib>
#include <algorithm>
#include <string>
#include<string.h>
#include"Studente.h"
#include <fstream>
using namespace std;
int main() {
list<Studente> lista1;
list<Studente> lista2;
ifstream file_ing1,file_ing2;
file_ing1.open("src/input1.txt",ios::in);
if(!file_ing1){
cout<<"Non posso aprire il file.."<<endl;
exit(-1);
}
file_ing1>>lista1;
file_ing1.close();
cout<<lista1<<endl;
}
/*
* Studente.cpp
*
* Created on: 09/gen/2015
* Author: jqr91
*/
#include "Studente.h"
Studente::Studente() {
// TODO Auto-generated constructor stub
nome="";
cognome="";
matricola="";
}
Studente::~Studente() {
// TODO Auto-generated destructor stub
}
Studente::Studente(const Studente &s){
nome=s.nome;
cognome=s.cognome;
matricola=s.matricola;
esami.resize(s.esami.size());
copy(s.esami.begin(),s.esami.end(),esami.begin());
}
bool Studente::operator ==(Studente &d){
return matricola==d.matricola;
}
void Studente::setNome(string n){
nome=n;
}
void Studente::setCognome(string c){
cognome=c;
}
void Studente::setMatricola(string m){
matricola=m;
}
string Studente::getNome(){
return nome;
}
string Studente::getCognome(){
return cognome;
}
string Studente::getMatricola(){
return matricola;
}
void Studente::addEsame(int v){
esami.push_back(v);
}
void Studente::clear(){
esami.clear();
}
float Studente::mediaVoti(){
float somma=0;
for(int i=0;i<(int)esami.size();i++){
somma=esami[i]+somma;
}
return somma/(float)esami.size();
}
ostream &operator<<(ostream &o,Studente &s){
o<<" "<<s.nome<<" "<<s.cognome<<" "<<s.matricola<<" "<<endl;
for(int i=0;i<(int)s.esami.size();i++){
o<<s.esami[i]<<endl;
}
return o;
}
istream &operator>>(istream &in,Studente &s){
int n_esami;
string appoggio;
in>>appoggio;
s.setNome(appoggio);
in>>appoggio;
s.setCognome(appoggio);
in>>appoggio;
s.setMatricola(appoggio);
in>>n_esami;
s.esami.resize(n_esami);
for(int i=0;i<n_esami;i++){
in>>s.esami[i];
}
return in;
}
ostream &operator<<(ostream &out,list<Studente>&s){
list<Studente>::iterator it1;
it1=s.begin();
while(it1!=s.end()){
out<<*it1;
it1++;
}
return out;
}
istream &operator>>(istream &in,list<Studente>&s){
Studente app;
while(!in.eof()){
in>>app;
s.push_back(app);
}
return in;
}
/*
* Studente.h
*
* Created on: 09/gen/2015
* Author: jqr91
*/
#ifndef STUDENTE_H_
#define STUDENTE_H_
#include <iostream>
#include <vector>
#include <list>
#include<cstdlib>
#include <algorithm>
#include <string>
#include<string.h>
#include <fstream>
using namespace std;
class Studente {
private:
string nome;
string cognome;
string matricola;
vector<int> esami;
public:
Studente();
virtual ~Studente();
Studente(const Studente &s);
bool operator==(Studente &o);
friend ostream& operator<<(ostream &os, Studente &s);
friend istream& operator>>(istream &is, Studente &s);
// Funzioni SET
void setNome(string n);
void setCognome(string c);
void setMatricola(string m);
// Funzioni GET
string getNome();
string getCognome();
string getMatricola();
// Altre Funzioni
void addEsame(int v); // aggiunge un nuovo esame al vettore esami
void clear(); // azzera il vettore degli esami
float mediaVoti(); // calcola e restituisce la media dei voti
};
ostream & operator<<(ostream &os, list<Studente> &l);
istream & operator>>(istream &is, list<Studente> &l);
void elimina(list<Studente> &l, int s);
// INPUT: una lista l e un intero s
// OUTPUT: modifica la lista l eliminando tutti gli elementi con una media maggiore di s;
float compMedia(const list<Studente> &l);
// INPUT: una lista l
// OUTPUT: restituisce il valore medio delle medie dei voti degli elementi contenuti nella lista l;
#endif /* STUDENTE_H_ */
Il mio file di testo è questo qui:
Mario, Molinara, 1250, 6 18 23 28 30 30 30
Francesco, Fontanella, 1251, 10 23 24 23 25 24 28 19 22 18 28
Claudio, De Stefano, 1252, 5 24 22 29 24 18
Claudio, Marrocco, 1258, 5 23 25 24 28 29