ubuntuusers.de

Segmentation fault error

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

ollowain86

Anmeldungsdatum:
2. Mai 2014

Beiträge: 46

Hallo,

ich kriege allein durch das Deklarieren eines Feldes ein "Segmentation fault error", das Ganze schaut so aus:

1
2
3
4
int main()
{
int N=10000;
double ent[N][N]; //hier ist der Fehler, bei der Anzahl der "Spalten"

Seltsam ist, ich habe die Anzahl der Spalten aus Verweiflung mal geändert, also

1
ent[N][10] 

und schon war der Fehler weg. Dann hab ich heraus gefunden, dass es bis

1
ent[N][83] 

geht, aber nicht weiter.

Der Fehler ist an der Stelle des Programms, woran kann das liegen?

lg

Ollowain

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13217

ollowain86 schrieb:

ich kriege allein durch das Deklarieren eines Feldes ein "Segmentation fault error", das Ganze schaut so aus:

Der Fehler ist an der Stelle des Programms, woran kann das liegen?

10000 * 10000 * sizeof(double) = 800000000 ~ 0,8GB

plus

$ ulimit -a | fgrep stack
stack size              (kbytes, -s) 16384 

~ 16MB

Und: 0,8GB >> 16MB

Ciao

robert

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6514

Wohnort: Hamburg

Oder anders ausgedrückt - nach meinem Verständnis legst du das Datenfeld auf dem Stack an.

Probiere es doch mal mit malloc().

JawasDennu

Avatar von JawasDennu

Anmeldungsdatum:
22. August 2014

Beiträge: 143

Könnte es sein, dass die Systemressourcen knapp sind? Segmentation-Faults hatte ich regelmäßig beim Testen von Plasma 5 (Kubuntu) auf einem Netbook.

Jaahaaa! 😉 Ischweis! Ein Ackergaul ist kein Rennpferd und ein Golf ist kein Ferrari.

Ich teste halt gerne Leistungsgrenzen. Warum? Darum:

Was auf einem kleineren Rechner gut geht, ist auf größeren Maschinen sicher. Öhhhm, ja. Meistens.

Segmentation deutet auf RAM-Probleme hin. Seit ich bei meinem "Trabbi-Netbook" von Plasma zu LXDE runter gewechselt habe, sind diese Meldungen nie wieder aufgetaucht.

Wie verhält sich das System denn, wenn Du die Parameter mal von unten nach oben hochschraubst?

Wie schaut das System denn aus? Wieviel RAM? 0,8 GB könnten grenzwertig sein, wenn man nur 1 GB hätte.

Sonst bleibt halt nur die Ochsentour des Troubleshootings. Neuen Benutzer aufsetzen und nachspielen. Ja. Das ist nervig. Ganz schlimm: Den ganzen Kram auf ein anderes System spiegeln ODER (nicht gebrüllt, sondern boolean gemeint) RAMs testen/tauschen,- je nachdem, was man zur Verfügung hat.

Mir erscheint "neuen User mit kleinerem Ressourcenverbrauch aufsetzen und dann mal gucken" die unstressigste Lösung zu sein.

Viel Erfolg und lass mich nicht dumm bleiben - stay tuned!

Gruß, Jawas

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13217

JawasDennu schrieb:

Könnte es sein, dass die Systemressourcen knapp sind? Segmentation-Faults hatte ich regelmäßig beim Testen von Plasma 5 (Kubuntu) auf einem Netbook.

Nein, es liegt an der Stackgröße.

Segmentation deutet auf RAM-Probleme hin.

Nein. Für einen Segfault gibt es verschiedene Gründe, mindestens

  • Zugriff auf eine Speicheradresse, die in dem Prozess nicht existiert (z.B. der berühmte Nullzeiger).

  • Erreichen eines Resourcenlimits (wie hier, es ist die Stackgröße).

Viel Erfolg und lass mich nicht dumm bleiben - stay tuned!

Wie gesagt, die Lösung steht hier schon im Thema. Man kann das einfach ausprobieren, indem man die Variable auf den Heap legt:

1
2
3
4
5
6
7
8
#include <stdlib.h>

int main() {
  int N=10000;
  double **end = malloc(N*N*sizeof(double));
  /* double ent[N][N]; */
  return 0;
}
Antworten |