WinFuture-Forum.de: Segmentation Fault? - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Segmentation Fault?


#1 Mitglied ist offline   amdXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 84
  • Beigetreten: 15. März 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Wien, Österreich
  • Interessen:Computer, Linux, Mac, Internet, Digitale Fotografie, Programmieren, Webdesign, und viele mehr ;-)

geschrieben 08. Dezember 2008 - 15:17

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
0

Anzeige



#2 Mitglied ist offline   gl4di4t0r 

  • Gruppe: aktive Mitglieder
  • Beiträge: 419
  • Beigetreten: 03. Oktober 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Bärlin

geschrieben 08. Dezember 2008 - 15:29

Der vollständige Quelltext wäre äußerst hilfreich....

Eingefügtes Bild
Eingefügtes Bild
CCNA - Cisco Certified Network Associate
DropBox Online Sync-Speicher
0

#3 Mitglied ist offline   amdXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 84
  • Beigetreten: 15. März 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Wien, Österreich
  • Interessen:Computer, Linux, Mac, Internet, Digitale Fotografie, Programmieren, Webdesign, und viele mehr ;-)

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;
}

0

#4 Mitglied ist offline   Tazzilo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 55
  • Beigetreten: 13. Juli 08
  • Reputation: 0

geschrieben 08. Dezember 2008 - 16:04

Bin nicht der Ober-Geak aber wieso willst du so
*(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

0

#5 Mitglied ist offline   amdXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 84
  • Beigetreten: 15. März 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Wien, Österreich
  • Interessen:Computer, Linux, Mac, Internet, Digitale Fotografie, Programmieren, Webdesign, und viele mehr ;-)

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.
0

#6 Mitglied ist offline   Lofote 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.526
  • Beigetreten: 24. August 04
  • Reputation: 1

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):

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

0

#7 Mitglied ist offline   amdXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 84
  • Beigetreten: 15. März 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Wien, Österreich
  • Interessen:Computer, Linux, Mac, Internet, Digitale Fotografie, Programmieren, Webdesign, und viele mehr ;-)

geschrieben 08. Dezember 2008 - 16:33

So mit eurer Hilfe funktioniert das Programm zwar, aber die Zahlen sind irgendwie nicht sortiert :P
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.
0

#8 Mitglied ist offline   Lofote 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.526
  • Beigetreten: 24. August 04
  • Reputation: 1

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 :P.
0

#9 Mitglied ist offline   amdXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 84
  • Beigetreten: 15. März 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Wien, Österreich
  • Interessen:Computer, Linux, Mac, Internet, Digitale Fotografie, Programmieren, Webdesign, und viele mehr ;-)

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 :P
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0