Segmentierungsfehler, große Arrays

Lesezeit: 2 Minuten

Benutzer-Avatar
Alexey Matveev

#include <stdio.h>
#define N 1024
int main(){
  int i, j;
  int a[N][N];
  int b[N][N];
  for (i=0;i<N;i++){
    a[i][i]=i;
    b[i][i]=i;
  }
  for (i=0;i<N;i++)
    for(j=0;j<N;j++)
    {
         printf("%d", a[i][j]);
         printf("%d", b[i][j]);
    }
  return 0;
}

Dieses Programm ist ein Grund für einen Segmentierungsfehler, aber wenn ich N als 1023 definiere, funktioniert das Programm korrekt. Warum passiert es?

  • AurelioDeRosa, es ist nur ein Beispiel, in meinem Programm bin ich auf ein ähnliches Problem gestoßen.

    – Alexey Matveev

    26. Oktober 2011 um 12:08 Uhr

Benutzer-Avatar
Cnicutar

Sie überlaufen den Stapel. 2 * 1024 * 1024 * sizeof(int) ist viel für die meisten Systeme.

Die einfachste Lösung wäre, die Arrays zu erstellen static.

static int a[N][N];
static int b[N][N];

Andere Methoden:

  • Machen Sie die Arrays global (dies ist im Wesentlichen dasselbe wie oben)
  • Verwenden malloc in einer Schleife und natürlich daran denken free

    int **a = malloc(N * sizeof *a);
    for (i = 0; i < N; i++)
        a[i] = malloc(N * sizeof *a[i]);
    

  • @AlexeyMatveev ODER Sie können dem Compiler sagen, dass er Ihnen einen größeren Stack geben soll! Dafür gibt es eine Möglichkeit!

    – xanatos

    26. Oktober 2011 um 12:19 Uhr

  • @xanatos: Es liegt nicht unbedingt am Compiler – in vielen Umgebungen wird die Stapelgröße zur Laufzeit bestimmt

    – PaulR

    26. Oktober 2011 um 12:28 Uhr

  • @xanatos Weitermachen, wo @PaulR aufgehört hat, zum Beispiel wird dies unter Unix mit gesetzt ulimit -s.

    – Cnicutar

    26. Oktober 2011 um 12:29 Uhr


  • statisch int p[20000000]; verursacht den folgenden Fehler: Array-Deklaration mit variabler Länge kann keine ‘statische’ Speicherdauer haben. Wie unterscheidet sich das von dem Vorschlag?

    – Michael

    17. Mai 2014 um 19:37 Uhr

  • @Michal Nein, wird es nicht. Dieser Fehler tritt auf, wenn Sie verwenden static Für ein Array mit variabler Länge.

    – Spikatrix

    18. Oktober 2015 um 10:51 Uhr

1367770cookie-checkSegmentierungsfehler, große Arrays

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy