# gcc + Speicher

## oliver2104

Hallo,

möchte für gentoo-linux ein C-Programm schreiben und mit gcc kompilieren.

Würde gerne folgende Variable bzw. Feld verwenden:

int prop[400][400][2];

Diese Datenmenge sprengt den Speicher

und beim Start gibts einen Segmentation Fault.

Hab jetzt von den verschiedenen Speichermodellen unter C gehört.

z.b:  Speichermodell: Huge

Hab aber noch keine gcc option gefunden, um mein Programm mit Huge zu compilieren.

Oder gibts eine andere Lösung ?

Bitte um Hilfe.

----------

## firefly

 *oliver2104 wrote:*   

> Hallo,
> 
> möchte für gentoo-linux ein C-Programm schreiben und mit gcc kompilieren.
> 
> Würde gerne folgende Variable bzw. Feld verwenden:
> ...

 

öhm das feld sprengt nicht den speicher auser du hast nur ca 1,5 MB  :Wink: 

denn

400*400*2 = 320 000 ints

ein int hat auf einem 32 bit system eine größe von 32 Bit = 4 Bytes

daraus folgt:

320 000 * 4Bytes = 1280000 Bytes oder 1,28 Megabytes.

Ich denke bei dir ist eher das problem, das dein Programm auf einen Speicherbreich zugreifen möchte, den es nicht verwenden darf.

----------

## Necoro

Wahrscheinlich hast du einen "off-by-one"-Fehler beim Befüllen des / Zugreifen auf das Feld  :Smile:  ... also du greifst zB auf prop[401][...][...] zu  :Smile: 

----------

## c_m

Schuss ins Blaue: Post Fence Error?!

Hast mal mit debugausgaben nachgeguckt wann es crashed? Beim initialisieren oder beim ersten Zugriff?

----------

## De Beukelaer

Für denn Fall, dass man das einfach nicht kennt (nano HowTo  :Wink: :

Beim Kompilieren ein -ggdb dazu:

gcc -ggdb foo.c

dann das Programm mit gdb öffnen/ausführen/bla:

gdb a.out -d .

ein Breakpoint setzen:

b main

starten:

run

und mit "n" Schritt für Schritt durch gehen um zu sehen wo es wirklich kracht.

...vielleicht hilft's ja...

----------

## oliver2104

Danke für Eure Antworten,

hatte einen "off-by-one"-Fehler, 

d.h. bin mit den Indizes ein wenig durcheinander gekommen.

Jetzt gehts,

viele Grüße, Oliver

----------

## 69719

 *Necoro wrote:*   

> Wahrscheinlich hast du einen "off-by-one"-Fehler beim Befüllen des / Zugreifen auf das Feld  ... also du greifst zB auf prop[401][...][...] zu 

 

400 reicht schon, denn bei prop[400] geht es von 0 - 399

----------

## Necoro

 *escor wrote:*   

>  *Necoro wrote:*   Wahrscheinlich hast du einen "off-by-one"-Fehler beim Befüllen des / Zugreifen auf das Feld  ... also du greifst zB auf prop[401][...][...] zu  
> 
> 400 reicht schon, denn bei prop[400] geht es von 0 - 399

 

Damn ... da sieht man mal wieder, wie leicht sowas passiert ;D

----------

## furanku

Wer's noch nicht kennt: Das hört auch auf den schönen Namen Banana-Error.

Warum das so heißt?

"I know how to spell 'banana', I just don't know where to stop ..."

 :Laughing: 

----------

