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