Hi Leute!
Ich habe folgendes Problem: Ich will ein Programm schreiben das den BubbleSort mit dem Typ int in C++ implementiert. Wenn ich selber die Zahlen in den Array eingebe funktioniert alles tadellos. Nun wollte ich mit der Funktion rand() zufällige Zahlen, mit dem Befehl *(arr + i) = rand(1); in den Array geben. Kompilierung funktioniert ohne Probleme, nur wenn ich das Programm dann ausführen will kommt der Fehler "Segmentation Fault".
Könnt ihr mit bitte sagen wie ich diesen Fehler umgehe, oder funktioniert sowas nur unter Windows, da ich lieber unter Linux, bzw unter OS X code als unter Windows.
Danke schonmal im Voraus.
amdXP
Seite 1 von 1
Segmentation Fault?
Anzeige
#2
geschrieben 08. Dezember 2008 - 15:29
Der vollständige Quelltext wäre äußerst hilfreich....
CCNA - Cisco Certified Network Associate
DropBox Online Sync-Speicher
#3
geschrieben 08. Dezember 2008 - 15:47
Der ist ein bisschen lang aber bitteschön:
#include <iostream> #include <cstdlib> using namespace std; void BubbleSort(int *arr, int len); void Print(int *arr, int len); int main(){ int *arr, len; cout << "How many items should the array sort? "; cin >> len; // geneating random numbers srand(time(0)); for(int i = 0; i < len; i++) *(arr + i) = rand(); BubbleSort(arr, len); Print(arr, len); } void BubbleSort(int *arr, int len){ for(int i = 0; i < len; i++){ for(int j = 0; j < i; j++){ if(arr[i] > arr[j]){ int temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } void Print(int *arr, int len){ for(int i = 0; i < len; i++) cout << arr[i] << " "; cout << endl; }
#4
geschrieben 08. Dezember 2008 - 16:04
Bin nicht der Ober-Geak aber wieso willst du so
auf ein Array zugreifen?
Wieso nicht so?
Weiß nicht ob es so mit len geht aber sieht mir viel logischer aus als deine Variante, bei der du nichtmal Speicherplatz allokierst.
*(arr + i) = ....
auf ein Array zugreifen?
Wieso nicht so?
int main(){ int len; cout << "How many items should the array sort? "; cin >> len; int arr[len]; srand(time(0)); for(int i = 0; i < len; i++) arr[i] = rand(); BubbleSort(arr, len); Print(arr, len); }
Weiß nicht ob es so mit len geht aber sieht mir viel logischer aus als deine Variante, bei der du nichtmal Speicherplatz allokierst.
Dieser Beitrag wurde von Tazzilo bearbeitet: 08. Dezember 2008 - 16:11
#5
geschrieben 08. Dezember 2008 - 16:19
Ich wollte eigentlich Programmierung mit Pointern üben da ein Array ja eigentlich auch ein Pointer auf die erste Zelle von einem Array ist, aber wenn das der Fehler der segmentation Fault ist dann ändere ich das.
#6
geschrieben 08. Dezember 2008 - 16:19
Du reserviert keinen Speicher, deswegen schlägt das fehl! Du versuchst irgendwo in den Speicher zu schreiben, der dir gar nicht gehört, also machts klar "rumms". Direkt vor der Vorschleife muss das rein (achtung, ungetestet):
Was das jetzt mit Linux, Mac OS X oder Windows zu tun hat, frag ich mich aber!?
Zitat
arr=new int[len];
Was das jetzt mit Linux, Mac OS X oder Windows zu tun hat, frag ich mich aber!?
Dieser Beitrag wurde von Lofote bearbeitet: 08. Dezember 2008 - 16:20
#7
geschrieben 08. Dezember 2008 - 16:33
So mit eurer Hilfe funktioniert das Programm zwar, aber die Zahlen sind irgendwie nicht sortiert
Das wegen Windows, Linux und OS X ist ne längere Geschichte weil wir in der Uni diesen Radix Sort austesten wollten, der auf dem Windows Rechner vom Prof zwar funktionierte aber nicht auf meinem Macbook. Da war der gleiche Fehler, Segmentation Fault.
Das wegen Windows, Linux und OS X ist ne längere Geschichte weil wir in der Uni diesen Radix Sort austesten wollten, der auf dem Windows Rechner vom Prof zwar funktionierte aber nicht auf meinem Macbook. Da war der gleiche Fehler, Segmentation Fault.
#8
geschrieben 08. Dezember 2008 - 16:35
Das ist dann aber wohl eher eine Compilersache und nicht Betriebssystemabhängig.
Das Problem verstanden, warum es bei dir vorher nicht tat, haste aber? Das ist sehr wichtig beim Programmieren lernen, dass man die Fehler versteht .
Das Problem verstanden, warum es bei dir vorher nicht tat, haste aber? Das ist sehr wichtig beim Programmieren lernen, dass man die Fehler versteht .
#9
geschrieben 08. Dezember 2008 - 16:38
Jepp hab ich, nachdem ich den Speicher mittels dem new befehl bereit hatte ging es, danke für die Hilfe
Thema verteilen:
Seite 1 von 1