Προς το περιεχόμενο

C++ pou einai to la8os?


Pablo_Hasan

Προτεινόμενες αναρτήσεις

Δημοσ.

einai ena programma pou topo8etei ta pionia se mia skakiera, kai meta dinei thn 8esh tous. O g++ to kanei compile xwris la8os alla otan paw na to tre3w mou dinei segmentation fault.

kapoio la8os uparxei profanws me thn diaxeirish ths mnhmhs...

 

 

>#include <iostream>
using namespace std;
main()
{
enum Feld {LEER, BW, TW, SW, LW, DW, KW, BS, TS, SS, LS, DS, KS};
Feld brett[8][8];   //h skakiera
int zeile, spalte;   //seira, sthlh

for (zeile = 0; zeile < 8; zeile++)       //dinw arxikh timh ston pinaka
	for(spalte = 0; spalte < 8; spalte++)
		brett[zeile][spalte] = LEER;
		
for (spalte = 0; spalte < 8; spalte++)
	brett[1][spalte] = BW;
brett[0][0] = 		brett[0][7] = TW;
brett[0][1] =		brett[0][6] = SW;
brett[0][2] =		brett[0][5] = LW;
brett[0][3] = DW;	brett[0][4] = KW;

for (zeile = 7; zeile >= 0; zeile--)
	{
	for (spalte = 0; zeile < 8; spalte++)
		switch (brett[zeile][spalte])
		{
			case LEER: cout << " . "; break;
			case BW  : cout << " BW"; break;
			case TW  : cout << " TW"; break;
			case SW  : cout << " SW"; break;
			case LW  : cout << " LW"; break;
			case DW  : cout << " DW"; break;
			case KW  : cout << " KW"; break;
			default:;
		}
	cout <<'\n';
	}
}

Δημοσ.

To segmentation error (ή GPF στα Windows) προέρχεται τουλάχιστον στον δικό μου compiler (Borland C/C++ Builder 6) από την λανθασμένη συνθήκη:

 

for (spalte = 0; zeile < 8; spalte++)

 

όπου αν και αυξάνεις το spalte κατά μια μονάδα εντούτοις ελέγχεις την τιμή της zeile για το εάν είναι < 8 πράγμα που οδηγεί σε ένα ατέρμονα βρόχο με αποτέλεσμα η spalte να αυξάνεται συνεχώς πέραν των ορίων του πίνακα brett (σε συστήματα με ανεκτικό διαχειριστή μνήμης αυτό το λάθος μπορεί να εμφανισθεί ακόμα και ύστερα από αρκετούς φαινομενικά -και μόνο- σωστούς κύκλους εκτέλεσης).

 

Το πρόγραμμα φαίνεται πως ξεπερνά το segmentation error εάν αλλάξουμε την zeile < 8 σε spalte < 8.

 

Καλή συνέχεια!!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...