Gracias de nuevo Vosk,
No acabo de entender esta parte:
".. Si lo haces así recuerda que para finalizar no hay suficiente con llista.clear() (que por cierto te lo has dejado), tendrás que recorrer todos los elementos para hacer delete[]cO y al final llista.clear().."
Estaría agradecido si pudieras comentarme-lo de otra forma a ver si lo pillo jejeje
He vuelto a aplicar cambios y ahora tengo lo siguiente:
Código C++:
Ver original#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <list>
using namespace std;
typedef struct {
char EV;
float T;
int E,R;
string P;
float G;
string FLA;
int FLU;
char *O,*D;
float S,I;
} DADES_ARXIU;
enum ID_CAMPS{EV,T,E,R,P,G,FLA,FLU,O,D,S,I};
int main() {
list <DADES_ARXIU> llista;
DADES_ARXIU camps;
DADES_ARXIU zero = {0};
int camp;//incremental
char * pch;
string linia;
//FITXER DE LECTURA
ifstream fitxer;
fitxer.open("TCL/out.tr");
if (!fitxer) {
cerr << "Error al llegir fitxer";
return 1;
}
while(getline(fitxer,linia)){
camp = EV;
pch
= strtok((char*)linia.
c_str(), " "); while(pch != NULL){
switch(camp) {
case EV: {
camps.EV = pch[0];
}break;
case T: {
}break;
case E: {
}break;
case R: {
}break;
case P: {
camps.P = pch;
}break;
case G: {
}break;
case FLA: {
camps.FLA = pch;
}break;
case FLU: {
}break;
case O: {
//camps.O = new char[strlen(pch)];
//memcpy(camps.O,pch,strlen(pch));
}break;
case D: {
//camps.D = new char[strlen(pch)];
//memcpy(camps.D,pch,strlen(pch));
}break;
case S: {
}break;
case I: {
}break;
}
camp++;
}
if(camp != I+1){ cout << "ERROR DE FITXER"; return 1;}
llista.push_back (camps);
//VACIAR STRUCT
camps = zero;
}
fitxer.close();
llista.clear();
return 0;
}
La parte de vaciar el struct en cada repetición del bucle no estoy muy seguro si lo hace bien pero la intención es que así lo haga.
Un Saludo,
Fran