Domanda

Sto facendo un gioco e ho memorizzato i dati della mappa in un array a 2 dimensioni di dimensioni [34] [10]. Originariamente ho generato mappa utilizzando una semplice funzione per riempire l'array e salvato questi dati in un file utilizzando il seguente codice:

ofstream myFile;
myFile.open("map.txt");

for ( int y = 0 ; y < MAP_HEIGHT ; ++y )
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
        myFile << m_acMapData[x][y];
    }
    myFile << '\n';
}

myFile.close();

Questo genera un file di testo che sembra qualcosa di simile a come lo voglio a. Tuttavia, quando provo a leggere di nuovo in utilizzando il seguente codice, ottengo un carico di violazioni di accesso e si blocca in fase di esecuzione:

ifstream myFile;
int i=0;
int j=0;
char line[MAP_WIDTH];

myFile.open("map.txt");
while (!myFile.eof())
{
    myFile.getline(line, MAP_WIDTH);
    for ( i=0; i<MAP_WIDTH; i++ )
    {
        m_acMapData[i][j] = line[i];
    }
    ++j;
    cout << line;
}

Qualcuno sa qual è il problema?

È stato utile?

Soluzione

while (!myFile.eof())
{
        myFile.getline(line, MAP_WIDTH);

dovrebbe essere:

while ( myFile.getline(line, MAP_WIDTH) )
{

Sarebbe tuttavia più sicuro di leggere in uno std :: string:

string line:
while ( getline( myFile, line ) )
{

Si potrebbe anche voler leggere il mio blog su questo argomento, a http://punchlet.wordpress.com .

Altri suggerimenti

Ya Ci tornerò sicuramente in crash perché si sta facendo male qui.

ofstream myFile;
myFile.open("map.txt");

for ( int y = 0 ; y < MAP_HEIGHT ; ++y ) 
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
            myFile << m_acMapData[x][y];
    }
    myFile << '\n';
}
myFile.close();

MAP_HEIGHT = 3 Supponiamo e MAP_WIDTH = 6 ;

E devi sapere che array in C / C ++ è importante fila in modo che quando si tenta di accedere

m_acMapData [4] [0] sarebbe accedere alla memoria di fuori della sua portata.

Quindi, fare qualcosa di simile:

for ( int y = 0 ; y < MAP_HEIGHT ; ++y ) 
{
    for ( int x = 0 ; x < MAP_WIDTH ; ++x )
    {
            myFile << m_acMapData[y][x]; // here to be changed
    }

    myFile << '\n';
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top