Fehler bei Ausführung von Programm
-
Hallo zusammen!
Bei großer Elementanzahl stürzt das Programm immer ab.
Weiß jemand wieso?
#include<stdio.h> #include<conio.h> #define MAX 700000 void quicksort(int n, float a[]); int main() { printf("\n\n\t\t\t\tQuicksort\n\n\n"); int i, j; float a[MAX]; printf("\n\nUngeordnet:\n"); for(i = MAX, j = 0; i > 0; i--, j++) { a[j] = i; if(i > MAX - 10) { printf("n: %3d a: %f", (j + 1), a[j]); printf("\n"); } } quicksort(MAX, a); printf("\n\nGeordnet:\n"); for(j = 0; j < 10; j++) { printf("n: %3d a: %f", (j + 1), a[j]); printf("\n"); } getchar(); return 0; } void quicksort(int n, float a[]) { int i, ende; float temp; if(n > 0) /* Nichts tun, wenn Vektor kleiner zwei Elemente */ { temp = a[n/2]; /* Gewaehltes Element wird bewegt */ a[n/2] = a[0]; /* nach a[0] */ a[0] = temp; ende = 0; for(i = 1; i < n; i++) /* Aufteilung */ { if(a[i] < a[0]) { ende++; temp = a[ende]; a[ende] = a[i]; a[i] = temp; } } temp = a[ende]; /* Gewaehltes Element wird zurueckgeholt */ a[ende] = a[0]; a[0] = temp; quicksort(ende, a); quicksort(n-ende-1, &a[ende+1]); } }
Nur mal kurz zur Info:
Ich benutze kein Linux, sondern Windows XP mit Dev-C++.
Leider benötige ich so große Werte zur genaueren Bestimmung der Sortierungszeit. Bei 100000 Werten ist die Messung zu ungenau. Gibt es irgendwelche Wege bei der Programmierung, um den Fehler zu umgehen?
-
a ist ja ~2,7 MB groß. Und du legst das auf dem Stack an. Das kann zwar gutgehen, bei dir siehts aber anders aus.
Hol dir den Speicher für a lieber via malloc().
-
Kenne mich mit malloc nicht so aus!
Kannst du bitte den Programmcode einmal beispielsweise anpassen?
-
Schau dir bitte mal ein Tutorial an. Das steht da haufenweise.
//float a[MAX]; float *a; a = malloc(sizeof(float)*MAX);