Il file origine e' composto da un header di 5 righe e poi 6000 righe con 6000 elementi di dati di elevazione
La compilazione del programma sottostante avviene corretamente ma quando viene messo in esecuzione
Errore di segmentazione
-------------------------
int main()
{
int t;
stringstream textstr;
string s="";
int riga,colonna;
int srtm[6000][6000];
ifstream infile( "E010_N40.asc" );
// salta l'header
for (t = 0; t <= 5; t++)
{
getline(infile, s);
}
riga = 0;
colonna = 0;
while (infile)
{
string s;
if (!getline( infile, s )) break;
istringstream ss(s);
colonna = 0;
while (ss)
{
string s;
if (!getline( ss, s, ' ' )) break;
cout << riga << ":" << colonna << ":" << atoi(s.c_str()) << endl;
srtm[riga][colonna] = atoi(s.c_str());
colonna++;
}
riga++;
}
return 0;
}
-------------------------
La soluzione, molto semplice, e' sostituire il tipo dati matrice con un vector
-------------------------
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <vector>
using namespace std;
int main()
{
int t;
stringstream textstr;
string s="";
int riga,colonna;
vector<int> srtm;
ifstream infile( "E010_N40.asc" );
// salta l'header
for (t = 0; t <= 5; t++)
{
getline(infile, s);
}
while (infile)
{
string s;
if (!getline( infile, s )) break;
istringstream ss(s);
colonna = 0;
while (ss)
{
string s;
if (!getline( ss, s, ' ' )) break;
cout << riga << ":" << colonna << ":" << atoi(s.c_str()) << endl;
srtm.push_back(atoi(s.c_str()));
}
}
return 0;
}
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <vector>
using namespace std;
int main()
{
int t;
stringstream textstr;
string s="";
int riga,colonna;
vector<int> srtm;
ifstream infile( "E010_N40.asc" );
// salta l'header
for (t = 0; t <= 5; t++)
{
getline(infile, s);
}
while (infile)
{
string s;
if (!getline( infile, s )) break;
istringstream ss(s);
colonna = 0;
while (ss)
{
string s;
if (!getline( ss, s, ' ' )) break;
cout << riga << ":" << colonna << ":" << atoi(s.c_str()) << endl;
srtm.push_back(atoi(s.c_str()));
}
}
return 0;
}
Nessun commento:
Posta un commento