Buenas a todos, estoy haciendo un juego y una clase me da error, y no se a que se debe; la función debería leer de un archivo números de 5 cifras, después almacenarlos en una matriz de 4 columnas por un numero de filas que es el primer numero del archivo.
A ver si me podéis ayudar a arreglar el código.
#include <iostream>
#include <fstream>
using namespace std;
class matriz
{
public:
int filas;
char cadena[5];
int **m;
void leer(char* s)
{
//abrimos
ifstream fe;
fe.open(s,ios::in);
if(!fe)
{
cout<<"fallo"<<endl;
}
//leemos
//con la primera linea sacamos las filas
fe.getline(cadena,6);
//para pasar la cadena a un int
filas=(cadena[0]-48)*10000+(cadena[1]-48)*1000+(cadena[2]-48)*100+(cadena[3]-48)*10+(cadena[4]-48);
//iniciamos la matriz
m=new int *[filas];
for(int i=0;i<=filas;i++)
{
m[i]=new int[4];
}
//seguimos leyendo
for(int i=0;i<filas;i++)
{
for(int j=0;j<4;j++)
{
fe.getline(cadena,6);
m[i][j]=(cadena[0]-48)*10000+(cadena[1]-48)*1000+(cadena[2]-48)*100+(cadena[3]-48)*10+(cadena[4]-48);
}
}
fe.close();
}
void destruir()
{
for(int i=0;i<=filas;i++)
{
delete [] m[i];
}
delete [] m;
}
};
int main()
{
matriz matriz1;
matriz1.leer("mapa1.txt");
matriz1.destruir();
return 0;
}
Gracias a todos por adelantado.
Si en una función vas a pasarle una cadena constante, pon el argumento como constante también 'const char*'...
void leer(const char* s)
Cual es el error que te esta dando? mandanos una traza o algo...
Lo primero gracias por responder; he utilizado const y ya compila pero colocando un cout<<m[j] en la linea 38 compruebo que no hace los que esperaba, asi que sigo sin saber donde esta el fallo....
En el tratamiento de error al abrir el fichero, muestras "Fallo", sin embargo sigues leyendo, pon un return al menos.
Linea:
for(int i=0;i<=filas;i++)
Esta linea cambiala hasta '< filas', porque si le pones '<= filas', le estás obligando que se meta en una posición de memoria del array no asignada, la última posición de un array es 'tamaño - 1'.
Al final, dentro de la función main(), lees el fichero y a pesar de no saber si se ha leido bien, porque das por hecho que se lee bien, destruyes la clase. y esto provoca un fallo de segmentación porque la matriz no se ha creado.
Es lo que puedo decirte de vista rápida. Pureba a solucionar eso...
El paso a int hay una función que te lo hace todo muy bonito, atoi()
Muchisimas gracias por contestar; y aunque no me salen mas fallos sigue sin hacerlo bien. De todas formas gracias.