speicher fehler bei free
-
hallo leutz,
ich bekomme hier immer einen speicherzugriffsfehler.
(vc++6.0 win2k)
wenn ich das free weglasse geht alles normal.int main(int argc, char* argv[]){ int anzahl=(atoi(argv[1])); int *array=(int *) malloc(anzahl*sizeof(int)); for(int i=0;i<anzahl;i++){ array[i]=rand(); } for( i=0;i<anzahl;i++){ cout<< " "<<array[i]; } cout<<endl; cout<<"----------------------------"<<endl; quicksort(array,0,anzahl); for( i=0;i<anzahl;i++){ cout<< " "<<array[i]; } cout<<endl; free(array); return 0; }
-
du mischt C und C++, das ist nicht gut.
der fehler liegt wahrscheinlich in quicksort()
-
wieso im quicksort ???
wenn ich free weglasse, geht alles so wie es gehen soll.
auch wenn ich for free ein Sleep(langezeit) einfüge bekomme ich auch einen fehler.
-
Weil vielleicht in Quicksort() eine Anweisung fehlerhaft ist und einen Speicherbereich überschreibt und deshalb free() den Speicherblock nicht mehr richtig freigeben kann. Zeig uns doch mal den ganzen Code.
-
void quicksort1 (int a[], int l, int r) { int v, i, j, t; if (r>l) { v = a[r]; i = l-1; j = r; // wähle letztes Elem. als Schnittelem. for (;;) { while (a[++i] < v && i <= r); // i hochzählen, bis Schlüssel zu gross while (a[--j] > v && j >= l); // j runterzählen, bis Schlüssel zu klein if (i >= j) break; // keine Schlüssel mehr zu vertauschen t = a[i]; a[i] = a[j]; a[j] = t; // Vertauschung } t = a[i]; a[i] = a[r]; a[r] = t; // Schlüssel an richtige Stelle quicksort1 (a,l,i-1); quicksort1 (a,i+1,r); } } int main(int argc, char* argv[]){ int anzahl=(atoi(argv[1])); int *array=(int *) malloc(anzahl*sizeof(int)); for(int i=0;i<anzahl;i++){ array[i]=rand(); } /*for( i=0;i<anzahl;i++){ cout<< " "<<array[i]; }*/ cout<<endl; cout<<"----------------------------"<<endl; quicksort1(array,0,anzahl); /* for( i=0;i<anzahl;i++){ cout<< " "<<array[i]; } */ cout<<endl; free(array); return 0; }
-
Du gibtst als Rechte grenze anzahl an, damit liest du als Schnittelement einen int hinter dem Array (ein Array der Größe anzahl hat die Elemente a[0]..a[anzahl-1]).
-
danke, stimmt.