Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Segmentation Fault

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
09.08.2006, 11:15 Uhr
Karldin Shinowa
Professional Noob


Bekomme folgende Warnung bevor mein Programm abstürtzt:
Eine Zugriffsverletzung(segmentation Fault) trat in ihrem Programm auf

Hmm was soll ich jetzt checken um den Fehler zu beheben?????
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.08.2006, 11:19 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst mal mit dem Debugger durchstiefeln, um zu sehen, wo der segfault denn auftritt. Dann kucken, worauf da gerade zugegriffen wird - in aller Regel handelt es sich bei sowas um einen buffer overflow, ne Null-Pointer exception oder einen wilden (uninitialisierten) Zeiger. Ohne Code ist das aber nicht rauszukriegen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.08.2006, 11:28 Uhr
Karldin Shinowa
Professional Noob


Ok hab die Zeile:


C++:
numOfSame=1;
for(int k=i+1,l=j+1;k<sizeHorizontal,l<sizeVertical;k++,l++)
{
   if(field[k][l].ch==CHAR)//<-----
   {
      numOfSame++;
   }
   else break;
}
if(numOfSame>=4) return win;



da das array field sizeHorizontal*sizeVertical is sollte es durch Absicherungen garnet auf was falsches zugreifen dürfen. CHAR wird am anfang der Funktion initialisiert und is kein zeiger. Was überhaupt witzig ist: das codestück läuft ein paar mal ok(wird öfter aufgerufen) und wirft erst beim x-ten mal(immer das gleiche x) den fehler
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 09.08.2006 um 11:32 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.08.2006, 12:21 Uhr
~DoppleR
Gast


Koennte am Abbruchkriterium liegen.

C++:
k<sizeHorizontal,l<sizeVertical;


liefert true wenn l<sizeVertical, ignoriert also den ersten Vergleich. Versuch mal

C++:
(k<sizeHorizontal) && (l<sizeVertical);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.08.2006, 12:48 Uhr
Karldin Shinowa
Professional Noob


So funtzt danke. Sollte man bei for-Schleifen also bei der bedingung lieber und statt komma operator nehmen??? Ich kapier noch net ganz warum eine der Bedingungen ignoriert wird. Dachte der Komma Operator funktioniert da wie bei k++,i++. da wird ja auch beides ausgeführt
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.08.2006, 12:54 Uhr
~DoppleR
Gast


Das stimmt auch. Es wird beides ausgef"uhrt, aber der R"uckgabewert von (Anweisung1,Anweisung2 ist der R"uckgabewert von Anweisung2. Die for-Schleife bricht ab, wenn der R"uckgabewert false ist.

Vielleicht sollte man noch darauf hinweisen, dass diese Schleife die Matrix parallel zur Diagonalen durchl"auft, also nicht alle Elemente "uberpr"uft.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.08.2006, 12:59 Uhr
Karldin Shinowa
Professional Noob



Zitat von ~DoppleR:

Vielleicht sollte man noch darauf hinweisen, dass diese Schleife die Matrix parallel zur Diagonalen durchl"auft, also nicht alle Elemente "uberpr"uft.

Is auch der Sinn. Das Feld ist ein 4-Gewinnt Feld und da wird gerade überprüft ob 4 gleiche in der diagonale vorhanden sind
So doof ein Feld so zu prüfen bin ich auch net
Also lieber das && verwenden oder? Das will ich noch bestätigt haben dann is der thread fertig
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 09.08.2006 um 13:00 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.08.2006, 13:06 Uhr
ao

(Operator)



Zitat von Karldin Shinowa:
Also lieber das && verwenden oder?

Richtig. Warst du nicht der, der nicht wusste, warum er C hassen soll? Dämmerts jetzt?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
09.08.2006, 13:08 Uhr
~DoppleR
Gast



Zitat von Karldin Shinowa:
[quote ~DoppleR]
Vielleicht sollte man noch darauf hinweisen, dass diese Schleife die Matrix parallel zur Diagonalen durchl"auft, also nicht alle Elemente "uberpr"uft.

Is auch der Sinn. Das Feld ist ein 4-Gewinnt Feld und da wird gerade überprüft ob 4 gleiche in der diagonale vorhanden sind
So doof ein Feld so zu prüfen bin ich auch net
[/quote]
Wollte damit "uberhauptnichts suggerieren. Sieht man nur nicht oft, also wollte ich lieber darauf hinweisen.

Zitat von Karldin Shinowa:

Also lieber das && verwenden oder? Das will ich noch bestätigt haben dann is der thread fertig

Ja, lieber das && benutzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.08.2006, 14:29 Uhr
Karldin Shinowa
Professional Noob



Zitat von ao:
[quote Karldin Shinowa]Also lieber das && verwenden oder?

Richtig. Warst du nicht der, der nicht wusste, warum er C hassen soll? Dämmerts jetzt?

ao[/quote]


Warum proggen wir dann alle c/c++???
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 09.08.2006 um 14:30 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: