speicherzugriffsfehler



  • hallo, es geht um das berechnen von ganzzahlen bis zu 1000 stellen....ich hab mir gedacht ich nehm ein char-array mit 1000 elementen und schreib funktionen für die 4 grundrechnungsarten....allerdings habe ich mit folgendem code einen speicherzugriffsfehler und ich seh einfach nicht wieso (stehe wohl auf der leitung)....

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    char *speicher(const char *zahl);
    int istZahl(const char *zahl);
    void umwandeln(char *zahl);
    void ausgabe(const char *zahl);
    int add(const char* a,const char *b,char *c);
    
    int main()
    {
        char buffer[1001];
        char *a=NULL,*b=NULL,*c=NULL;
    
        do
        {
            printf("\nErste Zahl: ");
            scanf("%s",buffer);
            printf("\n\n");
        }while(!istZahl(buffer));
    
        umwandeln(buffer);
        a=speicher(buffer);
        strcpy(a,buffer);
    
        do
        {
            printf("\nZweite Zahl: ");
            scanf("%s",buffer);
            printf("\n\n");
        }while(!istZahl(buffer));
    
        umwandeln(buffer);
        b=speicher(buffer);
        strcpy(b,buffer);
    
        putchar('\n');
        putchar('\n');
    
        ausgabe(a);
        printf(" und ");
        ausgabe(b);
        printf(" sind die beiden Zahlen, mit denen jetzt mit speziellen Funktionen gerechnet werden kann\n\n");
    
        if(!add(a,b,c))
            printf("Es gab einen Bereichsüberlauf bei der Addition\n");
    
        printf("Das Ergebnis ist: ");
        ausgabe(c);
    
        free(a);
        free(b);
        free(c);
    }
    
    char *speicher(const char *zahl)
    {
        int n;
        char *p;
    
        n=strlen(zahl)+1;
    
        p=(char *)malloc(n);
    
        return p;
    }
    
    int istZahl(const char *zahl)
    {
        int i,len;
    
        len=strlen(zahl);
    
        for(i=0;i<len;++i)
            if(zahl[i]<48 || zahl[i]>57)
                return 0;
    
        return 1;
    }
    
    void umwandeln(char *zahl)
    {
        int i,len;
    
        len=strlen(zahl);
    
        for(i=0;i<len;++i)
            zahl[i] -= 48; 
    }
    
    void ausgabe(const char *zahl)
    {
        int i,len;
    
        len=strlen(zahl);
    
        for(i=0;i<len;++i)
            printf("%d",zahl[i]);
    }
    
    int add(const char* a,const char *b,char *c)
    {
        int i,len,rest=0;
        char buffer[1001];
        char *arev=NULL,*brev=NULL;
    
        strcpy(arev,a);
        strcpy(brev,b);
    
        strrev(arev);
        strrev(brev);
    
        len=strlen(arev);
    
        for(i=0;i<len;++i)
        {
            buffer[i]=((arev[i]+brev[i]+rest)%10);
            if((arev[i]+brev[i]+rest)>9)
                rest=(arev[i]+brev[i]+rest)/10;
        }
    
        if(rest>0)
        {
            if(len<1000)
            {
                ++i;
                buffer[i]=rest;
                c=speicher(buffer);
                strcpy(c,buffer);
                return 1;
            }
            else
            {
                c=speicher(buffer);
                strcpy(c,buffer);
                return 0;
            }
        }
        else
        {
            c=speicher(buffer);
            strcpy(c,buffer);
            return 1;
        }
    
        strrev(c);
    }
    

    mfg



  • hat sich schon erledigt, ich hab der funktion (da ich den speicher für c erst dort reserviert hab) einen NULL - pointer übergeben....

    mfg


Anmelden zum Antworten