Segmentation Fault

flogy92

Mitglied
Guten Tag zusammen!

Ich habe vorhin beim Debuggen meines Programms einen Segmentation Fault bekommen. Ich weiss zwar inzwischen ungefähr, was das ist, jedoch tritt dieser Fehler anscheinend immer aus anderen Gründen auf :S

Bei mir kam der Fehler bei diesem Code:
Code:
  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      karte[ii][i] = werte_umkehren(karte[ii][i]);
    }
  }

...auf der fünften Zeile!

Da wird folgende Funktion aufgerufen:

Code:
int werte_umkehren(int karte)
{
  int karte_neu;
  
  if (karte == 1)
  {
    karte_neu = 0;
  }
  else
  {
    karte_neu = 1;
  }
  
  return karte_neu;
}


Kann mir vielleicht jemand kurz erklären, was daran falsch sein sollte? Das programm funktioniert nämlich , wie es sollte. Bloss kann ich die EXE nicht ausführen und beim Debuggen kommt eben diese Meldung...

Danke im Voraus!


MfG flogy
 
Hallo,

wie ist "karte[][]" deklariert (Größe) und welche Werte haben "breite" und "hoehe"? Vermutlich schießt du irgendwo über die Arraygrenzen hinaus.

Gruß
MCoder
 
wie ist "karte[][]" deklariert (Größe) und welche Werte haben "breite" und "hoehe"? Vermutlich schießt du irgendwo über die Arraygrenzen hinaus.

int karte[99][99];
breite = 41;
hoehe = 29;

Kann also nicht sein, dass der Array zu klein wäre. Ausserdem würde ja dann das Programm beim Kompilieren meckern, was es aber nicht tut.

MfG flogy
 
Hallo,

falsche Array-Indizes fallen erst zur Laufzeit auf; da kommt keine Fehlermeldung vom Compiler.
Der Code schaut allerdings korrekt aus. Kommt der Fehler bei jedem Schleifendurchgang? Tritt der Fehler innerhalb von "werte_umkehren" auf oder erst bei der Zuweisung des Ergebnisses?

Gruß
MCoder
 
Erst bei der Zuweisung des Wertes. Jedenfalls wird vom Debugger diese Zeile markiert!

EDIT: Oder doch nicht, wenn ich nämlich die Funktion rausnehme und gleich direkt den Code ausführe, funktioniert es!

EDIT 2: ==> Neuer Fehler:

Code:
  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      if (karte[ii][i] == 1)
      {
        karte[ii][i] = 0; //<-- hier kommt der Fehler!
      }
      else
      {
        karte[ii][i] = 1;
      }
    }
  }

Warum sollte das so nicht gehen? Es ist schliesslich ein int-Array...
 
Zuletzt bearbeitet:
Einen wunderschönen guten Tag,

int karte[99][99];
breite = 41;
hoehe = 29;

Eine Verletzung der Grenzen des Arrays treten somit nicht auf.

int karte[99][99];
Kann also nicht sein, dass der Array zu klein wäre. Ausserdem würde ja dann das Programm beim Kompilieren meckern, was es aber nicht tut.

Der Zugriff auf ein Array mit:

C:
karte[ii][i] = ...;

ist vollkommen legitim. Da kann der Kompiler keinen Fehler finden. Der Kompilier kann auch nicht zur Kompilierzeit wissen, welche Werte die Variablen ii und i annehmen.

Ich habe das Programm mit deinen Angaben mal bei mir kompiliert. Bei mir lässt sich kein Fehler finden. Das Programm läuft sonst auch tadellos. Hier das erstellte Programm:

C:
#include <stdio.h>
#include <stdlib.h>

int werte_umkehren(int karte)
{
  int karte_neu;

  if (karte == 1)
  {
    karte_neu = 0;
  }
  else
  {
    karte_neu = 1;
  }

  return karte_neu;
}

int main(int argc, char *argv[]) {
  int ii;
  int i;
  int hoehe = 29;
  int breite = 41;
  int karte[99][99];

  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      karte[ii][i] = 0;
    }
  }

  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      printf("%d\t", karte[ii][i]);
    }
    printf("\t");
  }

  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      karte[ii][i] = werte_umkehren(karte[ii][i]);
    }
  }

  for (i = 0; i < hoehe; i ++)
  {
    for (ii = 0; ii < breite; ii ++)
    {
      printf("%d\t", karte[ii][i]);
    }
    printf("\t");
  }

}

Allerdings glaube ich, dass du dies programmieren wolltest. Dein Programm ist womöglich umfangreicher. Der Fehler liegt eventuell an einer anderen Stelle.

Gruss
Mizi
 
Zuletzt bearbeitet:
Zurück