Windows-Meldung: Programm funktioniert nicht mehr!



  • Das sollte ein standardkonformer C++-Compiler eigentlich garnicht schlucken. Arraylängen müssen Compilezeitkonstanten sein, was hier nicht der Fall ist. Sowas funktioniert AFAIK nur in C99. Einige C++-Compiler mögen das als Erweiterung mit drin haben, aber dann sollten sie wenigstens eine entsprechende Warnung ausspucken.



  • benutze MinGW und war bisher ganz zufrieden, aber schreib ja auch immer nur so miniprogramme.



  • na super, schon wieder die gleiche fehlermeldung!

    bei der aufgabe sollte zuerst eine klasse Zahlenfeld entwickelt werden. mein code:

    class Zahlenfeld	{			// Deklaration der Eigenschaften der Klasse Zahlenfeld
    	int n;
    	unsigned int *daten;
    
    	public:			// Konstruktor der Klasse Zahlenfeld
    	Zahlenfeld( int groesse )	{
    		n=groesse;
    		daten=new unsigned int[groesse];
    		for( int i=0; i<groesse; i++ )	{
    			cout << "Bitte Wert des " << i+1 << ". Elements eingeben: ";
    			cin >> daten[i];
    		}
    	}			// Destruktor der Klasse Zahlenfeld
    	~Zahlenfeld()	{
    		delete[]daten;
    	}
    			// Definitionen der Methoden der Klasse Zahlenfeld
    	void ausgeben() {
    		for( int i=0; i>n; i++ )	{
    			cout << daten[i] << " ";
    		}
    		cout << '\n';
    	}
    	void verschieben_nach_links( unsigned int stellen )	{
    		for( int i=stellen; stellen>0; stellen-- )	{
    			int temp;
    			temp=daten[0];
    			for( int i=0; i<n-1; i++ )	{
    				daten[i]=daten[i+1];
    			}
    			daten[n-1]=temp;
    		}
    	}
    	void verschieben_nach_rechts( unsigned int stellen )	{
    		for( int i=stellen; stellen>0; stellen-- )	{
    			int temp;
    			temp=daten[n-1];
    			for( int i=1; i<n; i++ )	{
    				daten[i]=daten[i-1];
    			}
    			daten[0]=temp;
    		}
    	}
    };
    

    und anschließend sollte ein hauptprogramm geschrieben werden, welches die methoden der klasse testet:

    main()	{
    	unsigned int groesse;
    	cout << "Bitte Anzahl der Elemente eingeben: ";
    	cin >> groesse;
    	Zahlenfeld *z=new Zahlenfeld( groesse );
    	z->ausgeben();
    	z->verschieben_nach_links( 2 );
    	z->verschieben_nach_rechts( 3 );
    	z->verschieben_nach_links( 1 );
    	z->ausgeben();
    	delete z;
    	return 0;
    }
    

    wär klasse, wenn jemand noch mal drüber gucken könnte. das ganze dürfte ja im grunde nicht allzu schwer sein! oder?? 😕



  • Tja, so lange die Fehlermeldung die du von Windows bekommst, Geheimsache ist, it die Lösung des Problems auch geheim...
    Zusätzlich könntest du auch noch mit dem Debugger durch dein Programm steppen (ist ja nicht allzu lang) und auch noch rausfinden in welcher Zeile die Fehlermeldung ausgegeben wird.

    Lies dir auch bitte mal den Link in meiner Signatur durch.



  • ja, entschuldige, hatte gehofft, für jemand erfahreneren sei die lösung des problems relativ schnell ersichtlich, wie es ja bei dem programm, das ich zuerst gepostet hatte, ja offenbar war. nur weiß ich gerade wirklich nicht, wie ich weiter verfahren soll! was ist denn überhaupt der debugger. wenn ich das wüsste, könnte ich mir ja vielleicht selbst weiterhelfen...



  • Fehlermeldung ???

    Das einzige was war ist, dass es nichts ausgegeben hat, da du in Zeile 19 "i > n" statt "i < n" geschrieben hast...

    Du weißt nicht was ein Debugger ist ? Mit welcher IDE arbeitest du eigentlich? Makefiles ?

    Ich würde dir Visual C++ Express empfehlen. Da kannst du mit F10/F11 schrittweise dein Programm durchlaufen...



  • doch, bei mir kam diese fehlermeldung! aber du hast recht, habe das > durch < ersetzt und jetzt funktioniert es. vielen dank! 🙂



  • arbeite (soweit ich weiß) mit keiner vollständigen IDE, nur mit texteditor (notepad++), shell(windows-eingabeaufforderung) und MinGW zum kompilieren.



  • Wenn du sowieso schon MinGW benutzt, würde ich Code::Blocks als IDE empfehlen.
    Du startest dein Programm mit dem Debugger mit Debug/Step into. Wenn jetzt eine segmentation fault auftritt (und das ist mit großer Sicherheit das, was bei dir passiert) wird dein Programm angehalten, du kannst dir den Callstack ansehen und sämtliche Werte aller Variablen anschauen.
    Desweiteren kannst du dein Programm bis zu einer bestimmten Zeile laufen lassen (Rechtsklick/Run to cursor) und dann zeilenweise abarbeiten lassen (Debug/next line bzw. F7) um zu schauen, wo das Problem ist. Natürlich kannst du dabei auch jederzeit alle Variablenwerte überwachen.
    So sind die meisten Probleme in unter einer Minute gefunden - der Debugger ist einer der größten Freunde jedes Programmierers.



  • ok, danke! werd mal ausprobieren, wie ich damit zurechtkomme! 👍


Anmelden zum Antworten