Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

eisenmad

Treue Seele

  • »eisenmad« ist der Autor dieses Themas

Beiträge: 84

Wohnort: Heute hier, morgen dort

Beruf: Denker

  • Private Nachricht senden

1

30.10.2015, 14:24

Segmentation fault in Array

Hallo

Folgender Code liefert einen segmentation error. Was ist daran falsch und wie würde das richtig sein?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
const long int ADSIZE = 42;                                    
long int MAX_VAR_MUSTER=static_cast<long int>(pow(2,ADSIZE));      
long int Konfigurationsraum[MAX_VAR_MUSTER][ADSIZE];
long int ik, ibild;
 //=============================================
for(ibild=0;ibild<MAX_VAR_MUSTER;++ibild)
{
  for (ik=0;ik<ADSIZE;++ik) 
  {
  Konfigurationsraum[ibild][ik]=0;
  }
}


Danke

2

30.10.2015, 14:36

Das ist jetzt nur mal eine ganz "absurde" Vermutung, aber vielleicht liegt es möglicherweise daran, dass du ein viel zu großes Array versuchst anzulegen!? :crazy:
§2^{42}=4398046511104§

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

30.10.2015, 14:39

Dir ist klar, dass dein Array je nach Compiler zwischen 688128 und 1376256 GB groß ist?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

30.10.2015, 14:42

Weißt du wie groß 2^42 ist? Dein Array wird fast 1 Petabyte groß. Das ist eine Datenmenge die man in einem Rechenzentrum unter kriegen könnte, aber definitiv nicht in den Arbeitsspeicher eines einzelnen PCs. ;)

eisenmad

Treue Seele

  • »eisenmad« ist der Autor dieses Themas

Beiträge: 84

Wohnort: Heute hier, morgen dort

Beruf: Denker

  • Private Nachricht senden

5

30.10.2015, 14:45

oh ich dachte das passt in mein long integer noch hinein. Ja gut dann die direkte Folgefrage: Wie werden solche Zahlen denn dann behandelt? Möglich muss das sein. Ich kenne Programme, die mit Arrays von §2^{50}§ und größer arbeiten.

Die Frage ist nun theoretischer Natur, ich brauche das nicht für meine Anwendung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

30.10.2015, 14:49

Die Zahl selbst kann durch einen long int nicht unbedingt, durch einen long long int aber völlig problemlos dargestellt werden. Das Problem hier ist aber auch nicht die Zahl §2^{42}§, sondern die Tatsache, dass du versuchst, ein Array mit §2^{42}§ Elementen zu erzeugen...

An was für Programme denkst du da konkret, die angeblich einfach so mit Arrays von §2^{50}§ Elementen arbeiten? Auf einem PC wird das heutzutage ziemlich schwer möglich sein, selbst wenn du die nötige PC Hardware dafür hättest (die nicht existiert): Kein mir bekanntes, aktuelles PC Betriebssystem unterstützt derartige Mengen von Speicher...

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (30.10.2015, 15:02)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

7

30.10.2015, 15:29

Wie werden solche Zahlen denn dann behandelt? Möglich muss das sein. Ich kenne Programme, die mit Arrays von §2^{50}§ und größer arbeiten.

Ich könnte mir vorstellen das du keine Arrays meinst, sondern sowas wie sparse Arrays (eher im Zusammenhang mit sparse matrices zu finden). Du bist letztendlich von der Hardware her auf eine bestimmte Menge an Informationen, die du speichern und verarbeiten kannst, limitiert. Je nachdem wie du dein Problem beschreibst und deine Daten repräsentierst, kann sich die Menge der Informationen aber sehr stark unterscheiden. Das ist der Punkt wo die Informatik mit Datenstrukturen und Algorithmen ansetzt.

eisenmad

Treue Seele

  • »eisenmad« ist der Autor dieses Themas

Beiträge: 84

Wohnort: Heute hier, morgen dort

Beruf: Denker

  • Private Nachricht senden

8

30.10.2015, 15:49

Ich verstehe. Danke für die Antworten.

9

30.10.2015, 16:04

Wenn es kein Array sein muß könntest du std::map nutzen.
Da könntest du für den Key long long Werte nutzen.


C-/C++-Quelltext

1
std::map<long long, int> Map;


Und die existierenden Werte kannst du per Key oder Iterator abrufen.
Empires in Space
MMO 4X, Rundenbasiert
HTML5/TypeScript/Javascript/CSS/C#/SQL

10

30.10.2015, 16:41

Ja, das ist nämlich viel besser als ein normaler std::vector. :|

MfG
Check

Werbeanzeige