Zugriffsverletzung eines Zeigers bei Eingabe hoher Zahlen



  • Hallo erst mal.
    ich hoffe ich mach jetzt beim fragen stellen alles richtig.

    ich habe folgendes problem:
    mein programm funktioniert mit 3stelligen zahlen, nicht aber mit 4stelligen. bei eingabe einer 4stelligen zahl erhalte ich folgende fehlermeldung:
    Unbehandelte Ausnahme bei 0x7c93a978 in besondereZahlen.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00030fdc.
    ich hab leider gar keine idee woran es liegen könnte. ich dachte eigentlich ich hätte die sache mit den zeigern verstanden, aber irgendwie verhalten die sich immer falsch. (naja, ich mach was falsch, schon klar.)
    ich bekomm auch öfter merkwürdige meldungen wenn ich mir die zeiger mit printf anzeigen lasse.
    *zeiger sollte mir ja den wert ausgeben auf den der zeiger zeigt
    zeiger hingegen auf welchen platz im array er gerade zeigt, also 0, 1, 2 ... .
    zumindest das hab ich doch richtig verstanden, oder?

    danke schon mal für die hilfe, ich hoffe ich hab' alles richtig gemacht.

    das hier ist der besagte code:

    //besz.c
    //Diese Programm testet Zahlen auf Besonderheiten.
    
    #include <stdio.h>
    
    int		inumber = 0, isum = 0, iziff = 0;
    int		irest[] = {0}, *irest_zeiger =& irest[0];
    char	cnumber[]={0}, *cnumber_zeiger =& cnumber[0];
    int		i = 0, j = 0;
    
    //Hauptfunktion
    int main(void)
    {
    //Unterfunktionen
    int isDeficientNumber(int number);
    //int isPandigitalNumber(int number);
    //int isAutomorphicNumber(int number);
    
    //Ein- u. Ausgabe
    printf	("\n Besondere Zahlen");
    printf	("\n\n Geben Sie die zu testende Zahl ein: ");
    scanf	("\n %i",& inumber);
    printf	("\n %i", inumber);
    printf	(" ist ");
    
    if (isDeficientNumber(inumber) == 1)
    {
    	printf	("defizient");
    }
    
    getchar();
    getchar();
    return 0;
    }
    
    //Ufkt.: Defiziente Zahl
    int isDeficientNumber(int number)
    {
    	while ((i+2) <= inumber)
    	{
    		if (*irest_zeiger = inumber % (i+2) == 0)
    		{
    			*irest_zeiger = inumber / (i+2);
    		}
    		isum = isum + *irest_zeiger;
    		irest_zeiger++;
    		i++;
    		j++;
    	}
    
    	if (isum < inumber)
    	{
    		return 1;
    	}
    
    	else
    	{
    		return 0;
    	}
    
    	irest_zeiger = 0;
    }
    


  • Was denkst du denn wie groß deine Array irest und cbumber sind?



  • 4

    wenn du mich so fragst.

    /edit:
    aaaahhhh. der array braucht eine länge, also einen wert im [].
    entschuldige, hab das nicht gleich kapiert.
    danke.

    aber mein problem löst das noch nicht.



  • Turbinenreiter schrieb:

    4

    wenn du mich so fragst.

    Und was sagt sizeof(array) / sizeof(*array) ?
    🙂



  • 1 sagt das. unabhängig von der größe meiner eingabe. (bei [], bei [1000] - 1000. ich glaub das hab ich kapiert)

    ich hab jetzt versucht dem array eine größe zu geben. allerdings kann ich es nicht groß genug machen um ein zahl bearbeiten zu können die mehr als 6stellig ist.
    /edit: bei einer arraygröße von 100000000 kriege ich bei größeren zahlen wieder die zugriffsverletzung, wenn ich den array größer machen will -> Gesamtgröße des Arrays darf 0x7fffffff Bytes nicht übersteigen. unabhängig vom datentyp.

    ok, jetzt hab ich wieder was zu denken und zu probieren. vl reicht das schon das ich draufkomme.
    ihr dürft mir natürlich weiter helfen 😉
    danke.


Anmelden zum Antworten