client switching stacks?
-
ahoi,
Ich habe folgendes Problem.
Meine mergesort läuft ab 1050000 integer werten in ein Speicher Problem.
Valgrind gibt unteranderem die Im Titel genannte Warnung aus.Ich hatte so nen Problem noch nie und versteh es wenn ich ehrlich bin auch nicht, wenn meine Daten zu große werden gehn Sie halt ins nächste Cachelvl oder in den Hauptspeicher, wirds halt langsam... aber warum seg fault?
-
Dann zeig doch mal Code!
-
Hoffe das ist ncih zuviel
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <inttypes.h> #include "zeitmessung.h" #define SCHNITT 5 void mergesort(int array[], int links, int rechts) { int i = 0; int laenge = rechts - links + 1; int pivot = 0; int merge1 = 0; int merge2 = 0; int working[laenge]; if(links == rechts) return; pivot = (links + rechts) / 2; mergesort(array, links, pivot); mergesort(array, pivot + 1, rechts); for(i = 0; i < laenge; i++) working[i] = array[links + i]; merge1 = 0; merge2 = pivot - links + 1; for(i = 0; i < laenge; i++) { if(merge2 <= rechts - links) if(merge1 <= pivot - links) if(working[merge1] > working[merge2]) array[i + links] = working[merge2++]; else array[i + links] = working[merge1++]; else array[i + links] = working[merge2++]; else array[i + links] = working[merge1++]; } } int main (int argc, char* argv[]) { int* array_1 = calloc(arraygroesse, sizeof(int)); int links=0; int rechts=arraygroesse-1; mergesort(array_1, links, rechts); }
-
fehler gefunden
in zeile 16 musste man das array einfach dynamisch gestallten
-
Deine Zeile 16 legt ungeheuer große Arrays auf dem Stack an. Zu groß.
edit: Ich sehe, du bist mir 2 Minuten voraus
-
trz danke