Primzahlprogramm mit Zeigerfehler



  • hallo Leute

    ich hab mir ein Primzahlprogramm zum errechen eben jener geschrieben.

    Allerdings stoppt das Programm immer gegen Ende, zeigt einen Speicherfehler und läuft dann doch zu Ende und gibt den return code raus
    http://s1.directupload.net/images/080410/dbzsop5b.jpg
    (unter Visual C++)

    Wenn ich die prim.exe jedoch so starte sagt mir Windows dass das Programm ein Problem ausgelöst hat und beendet werden muss.
    http://s4.directupload.net/images/080410/i4nk95es.jpg

    Hier der Code:

    int main()
    {
    	int iAnzahl = 5;
    	cout<<"Wie viele Primzahlen moechtest du haben: ";
    	cin>> iAnzahl;
    	cout<<endl;
    
    	clock_t t1 = clock();                    // zum Zeit stoppen
    
    	int *primzahlen;
    	primzahlen = new int[iAnzahl];           // in diesem Array werden die schon errechneten primzahlen gespeichert, wie die 2
    	primzahlen[0] = 2;
    
    	int anzahl = 1;                          // die anzahl der schon errechneten Primzahlen, beginnend mit 1 wegen der 2
    	int zahl = 3;
    
    	while ( anzahl <= iAnzahl )
    	{
    		if ( prim(zahl, primzahlen, anzahl) )   // in der funktion prim wird nur das array durchlaufen bis zum punkt anzahl
    		{
    			primzahlen[anzahl] = zahl;
    			anzahl++;
    			//cout<<zahl<<endl;
    		}
    		else { }
    		zahl += 2;
    	}
    
    	clock_t t2 = clock();                         // auch zum Zeit stoppen
    
    	ausgabe(primzahlen, &iAnzahl);                // die primzahlen werden ausgegeben
    	//speichern(primzahlen, &iAnzahl);
    	delete[] primzahlen;
    
    	cout<< static_cast<long>(t2-t1) <<"ms gebraucht!"<<endl; // die verbrauchte zeit wird errechent und ausgegeben
    
    	system("PAUSE");
    	return 0;
    }
    

    wodran kann das liegen



  • zeile 17, du zählst eins zu weit ...



  • stimmt danke

    aber wieso macht der trotzdem weiter bzw gibt die fehlermeldung nur manchmal aus?



  • Undefiniertzes Verhalten ist nunmal... na wie soll ich sagen: Undefiniert! Du schreibst irgendwo in fremden Speicher rum und beschädigst so den Heap. Auf dem Heap befinden sich nicht nur Benutzerdaten, sondern auch Daten, die für den Heapmanager wichtig sind, wie zB Größe des Datenblocks oder Sentinels. Wenn du diese überschreibst, kriegt der Manager Probleme.

    Gruß
    Don06


Log in to reply