Speicherüberschreitung ?
-
Hi Leute,
Ich brauche Euere Hilfe!!
Ich versuche Instruktionen einer Tabelle zu löschen und in eine andere Tabelle nach einander einfügen.
Wenn ich das Programm erstelle, funktioniert einbandfrei.
Oder wenn ich in Visual Stidio Net der "Debuggen Starten" klicke funktioniert einbandfrei.Aber wenn Ich das Programm ausführen möchte, kommt es zu Fehlermeldung bei Debugger:
"Die Anweisung in "0x0041700a" verweist auf Speicher in "0x00000018". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden."Ich denke es liegt an Speicherüberschreitung.
Da Ich oft realloc benutze, kann sein, dass Ich damit den Fehler verursache.Aber Ich weise nicht, was Ich falsch tue:
Mein Programm (Ausschnitt):
for ( i =0; i < TmpVarSet[0].Tables[1].entries; i++) { value = &TmpVarSet[0].Tables[1].tab[i]; InsertIn(value); DeleteIn(value); TmpVarSet[0].Tables[1].entries++; }
/* Methode Insert */ sstatic void CreateListOne(freq_t * val); void InsertIn(freq_t *val){ int i=2; if(TmpVarSet[0].Tables[i].init==NULL) CreateListOne(val); else{ TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].init; while(TmpVarSet[0].Tables[i].pointer != NULL) TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].pointer->next; if( TmpVarSet[0].Tables[i].pointer==NULL) CreateListOne(val); else if(TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].init) { TmpVarSet[0].Tables[i].init=(list_t *)malloc(sizeof(list_t)); if(NULL == TmpVarSet[0].Tables[i].init) { fprintf(stderr, "Kein Speicher\n"); return; } TmpVarSet[0].Tables[i].init->instr = TmpVarSet[0].Tables[0].tab[1].instr; TmpVarSet[0].Tables[i].init->frequency = TmpVarSet[0].Tables[0].tab[1].frequency; TmpVarSet[0].Tables[i].init->pos = TmpVarSet[0].Tables[0].tab[1].pos; TmpVarSet[0].Tables[i].init->next=TmpVarSet[0].Tables[i].pointer; TmpVarSet[0].Tables[i].entries = TmpVarSet[0].Tables[i].entries+1; TmpVarSet[0].Tables[i].tab = realloc (TmpVarSet[0].Tables[i].tab, TmpVarSet[0].Tables[i].entries *sizeof(freq_t)); TmpVarSet[0].Tables[i].tab[TmpVarSet[0].Tables[i].entries-1] = *val; TmpVarSet[0].Tables[i].rest = (long) pow(2, TmpVarSet[0].Tables[i].clenght) - TmpVarSet[0].Tables[i].entries; }else{ TmpVarSet[0].Tables[i].pointer1=TmpVarSet[0].Tables[i].init; while(TmpVarSet[0].Tables[i].pointer1->next != TmpVarSet[0].Tables[i].pointer) TmpVarSet[0].Tables[i].pointer1=TmpVarSet[0].Tables[i].pointer1->next; TmpVarSet[0].Tables[i].pointer=(list_t *)malloc(sizeof(list_t)); if(NULL == TmpVarSet[0].Tables[i].pointer) { fprintf(stderr, "Kein Speicher"); return; } TmpVarSet[0].Tables[i].pointer->instr= TmpVarSet[0].Tables[1].tab[0].instr; TmpVarSet[0].Tables[i].pointer->frequency = TmpVarSet[0].Tables[1].tab[0].frequency; TmpVarSet[0].Tables[i].pointer->pos = TmpVarSet[0].Tables[1].tab[0].pos; TmpVarSet[0].Tables[i].pointer->next=TmpVarSet[0].Tables[i].pointer1->next; TmpVarSet[0].Tables[i].pointer1->next=TmpVarSet[0].Tables[i].pointer; TmpVarSet[0].Tables[i].entries = TmpVarSet[0].Tables[i].entries +1; TmpVarSet[0].Tables[i].tab = realloc (TmpVarSet[0].Tables[i].tab, TmpVarSet[0].Tables[i].entries *sizeof(freq_t)); TmpVarSet[0].Tables[i].tab[TmpVarSet[0].Tables[i].entries-1] = *val; TmpVarSet[0].Tables[i].rest = (long) pow(2, TmpVarSet[0].Tables[i].clenght) - TmpVarSet[0].Tables[i].entries; } } } void CreateListOne(freq_t *val){ int i =2; if(TmpVarSet[0].Tables[i].init == NULL) { if((TmpVarSet[0].Tables[i].init = ( list_t *) malloc(sizeof( list_t))) == NULL) { fprintf(stderr, "No mamory is for init\n"); return; } TmpVarSet[0].Tables[i].init->instr = val->instr; TmpVarSet[0].Tables[i].init->frequency =val->frequency; TmpVarSet[0].Tables[i].init->pos =val->pos; TmpVarSet[0].Tables[i].init->next = NULL; TmpVarSet[0].Tables[i].entries = TmpVarSet[0].Tables[i].entries+1; TmpVarSet[0].Tables[i].tab = realloc (TmpVarSet[0].Tables[i].tab, TmpVarSet[0].Tables[i].entries *sizeof(freq_t)); TmpVarSet[0].Tables[i].tab[TmpVarSet[0].Tables[i].entries -1] = *val; TmpVarSet[0].Tables[i].rest = (long) pow(2, TmpVarSet[0].Tables[i].clenght) - TmpVarSet[0].Tables[i].entries; }else{ TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].init; while(TmpVarSet[0].Tables[i].pointer->next != NULL) TmpVarSet[0].Tables[i].pointer = TmpVarSet[0].Tables[i].pointer->next; if((TmpVarSet[0].Tables[i].pointer->next =(list_t *) calloc(TmpVarSet[0].Tables[i].entries, sizeof(list_t))) == NULL) { fprintf(stderr,"Kein Speicherplatz für das " "letzte Element\n"); return; } TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].pointer->next; TmpVarSet[0].Tables[i].pointer->instr = val->instr; TmpVarSet[0].Tables[i].pointer->frequency =val->frequency; TmpVarSet[0].Tables[i].pointer->pos =val->pos; TmpVarSet[0].Tables[i].pointer->next=NULL; TmpVarSet[0].Tables[i].entries = TmpVarSet[0].Tables[i].entries +1; TmpVarSet[0].Tables[i].tab = realloc (TmpVarSet[0].Tables[i].tab, TmpVarSet[0].Tables[i].entries *sizeof(freq_t)); //TmpVarSet[0].Tables[i].entries = TmpVarSet[0].Tables[i].entries +1; TmpVarSet[0].Tables[i].tab[TmpVarSet[0].Tables[i].entries-1] = *val; TmpVarSet[0].Tables[i].rest = (long) pow(2, TmpVarSet[0].Tables[i].clenght) - TmpVarSet[0].Tables[i].entries; } }
/* Methode: Delete */ void DeleteIn( freq_t * val) { int i =1; if(TmpVarSet[0].Tables[i].init!= NULL) { if((TmpVarSet[0].Tables[i].init->instr == val->instr) && (TmpVarSet[0].Tables[i].init->frequency == val->frequency)&& (TmpVarSet[0].Tables[i].init->pos == val->pos)) { TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].init->next; free(TmpVarSet[0].Tables[i].init); TmpVarSet[0].Tables[i].init= TmpVarSet[0].Tables[i].pointer; val->instr=-1; val->frequency=-1; val->pos=-1; TmpVarSet[0].Tables[i].entries =TmpVarSet[0].Tables[i].entries- 1; TmpVarSet[0].Tables[i].rest = (long)pow(2, TmpVarSet[0].Tables[i].clenght) - TmpVarSet[0].Tables[i].entries; }else { TmpVarSet[0].Tables[i].pointer= TmpVarSet[0].Tables[i].init; while( TmpVarSet[0].Tables[i].pointer->next != NULL) { TmpVarSet[0].Tables[i].pointer1=TmpVarSet[0].Tables[i].pointer->next; if( (TmpVarSet[0].Tables[i].pointer1->instr == val->instr)&&(TmpVarSet[0].Tables[i].pointer1->frequency==val->frequency)&&(TmpVarSet[0].Tables[i].pointer1->pos == val->pos)) { TmpVarSet[0].Tables[i].pointer->next= TmpVarSet[0].Tables[i].pointer1->next; val->instr=-1; val->frequency=-1; val->pos=-1; TmpVarSet[0].Tables[i].entries =TmpVarSet[0].Tables[i].entries- 1; TmpVarSet[0].Tables[i].rest = (long)pow(2, TmpVarSet[0].Tables[i].entries) - - TmpVarSet[0].Tables[i].entries; free( TmpVarSet[0].Tables[i].pointer1); break; } TmpVarSet[0].Tables[i].pointer=TmpVarSet[0].Tables[i].pointer1; } } } else printf("Es sind keine Daten zum Löschen vorhanden!!!\n"); }
Hilf mir bitte!!!!
Ich sehe den Fehler einfach nicht.Im Voraus Vielen Dank
Lena