BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- C++ Mysteriöser Segfault (http://www.black-board.net/thread.php?threadid=13378)


Geschrieben von Compuholic am 08.08.2003 um 15:25:

  Mysteriöser Segfault

Naja, es ist eigentlich in C geschrieben, aber das kann man im Auswahlmenü nicht
auswählen. Ok, zum Problem:

Ich arbeite gerade an einem kleinen Programm. Aber immer wenn ich es starte Stürzt es mit einem Speicherzugriffsfehler ab. Zur Erklärung: Das Programm liegt mit fgets eine Konfigurationsdatei Zeilenweise ein. Dann wird mit strstr überprüft um was für eine Einstellung es sich handelt (ok, ist zwar nicht sehr effizient, aber da die Datei sehr klein ist und auch kaum Optionen kennt hab ich das der Einfachheit halber so gemacht).
Dann scannt die Funktion ScanForParamPos die eingelesene Zeile nach dem ersten Zeichen nach ein oder mehreren Leerzeichen oder Tabs und findet so den Parameter. Außerdem stellt sie sicher, daß kein newline oder carriage return Zeichen am Parameter hängt indem der einfach nur 0x00 ersetzt wird.

Damit ich jetzt die Quelle des Segfaults genauer bestimmen kann habe ich mich durch das Einfügen von printf Anweisungen näher an die Stelle herangetastet. Das sind die Letzten Worte des Programms:
Zitat:

[14:49] Module loaded: seen
[14:49] Module loaded: blowfish
[14:49] Module loaded: uptime
Using Port 12345
Activating Private-Mode...
Using channel: #abcdef
Debug......
AppendItem-Funktion

[14:49] * Last context: tclhash.c/238 []
[14:49] * Please REPORT this BUG!
[14:49] * Check doc/BUG-REPORT on how to do so.
[14:49] * Wrote DEBUG
[14:49] * SEGMENT VIOLATION -- CRASHING!
Speicherzugriffsfehler

Daher weiß ich daß das Programm in der Funktion AppendItem crasht. Das Problem. Der betreffende Code Ausschnitt sieht wie folgt aus.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
static int AppendItem(char *nickname, Subscriptions *ChainStart)
{
	Subscriptions	*actualPosition;
	Subscriptions	*lastPosition;

	printf("AppendItem-Funktion\n\n");
	actualPosition = ChainStart;
	printf("Debug 1");

Es ist also nur eine simple Zuweisung. Durch nie der Crash eigentlich nicht
verursacht werden kann, es sei denn actualPosition wird dereferenziert. Da man
aber erkennen kann, daß ich das nicht mache, habe ich keine Ahnung, was Da
schiefläuft. Denn "Debug 1" wird, wie oben sichtbar, nicht ausgegeben. Die
Definition von "Subscriptions" sieht übrigens folgendermaßen aus.
code:
1:
2:
3:
4:
5:
6:
7:
8:
typedef struct
{
	void	*previousItem;
	void	*nextItem;
	char	nickname[MAX_NICKLEN];
} Subscriptions;

Wer den kompletten Sourcecode braucht kann ihn hier bekommen:
http://compuholic.homelinux.org/remote.c



Geschrieben von Bogus am 08.08.2003 um 15:41:

 

ich versteh zwar nicht wirklich viel von C++, aber mal so ne frage... ist der Port 12345 nicht für das bekannte Progi Netbus???



Geschrieben von Champus am 08.08.2003 um 16:01:

 

Sicher aber nur wenn NetBus auch aktiv ist smile



Geschrieben von Bogus am 08.08.2003 um 16:09:

 

ja, das ist schon klar... aber trotzdem danke für die info!



Geschrieben von Compuholic am 08.08.2003 um 16:29:

 

Das Programm mit mit NetBus überhaupt nix zu tun.
Den Port 12345 habe ich nur als Beispiel gewählt.



Geschrieben von Bogus am 08.08.2003 um 16:36:

 

ahh so, na siehste, so kann man sich vertun, hab ja gesagt kenn mich mit C++ nicht besonders gut aus, so konnte ich auch nicht sehen für was es gut war... Sorry traurig



Geschrieben von phlox81 am 08.08.2003 um 19:40:

 

Hm, also ich seh da nur die void-pointer, für was sind die
und auf was zeigen die ?
Und übergibst du einen gültigen Pointer ?

Und die remote.c kann ich nicht downloaden...

Devil



Geschrieben von Compuholic am 08.08.2003 um 22:04:

 

Danke erstmal.

Ich hab das Problem gerade gefunden. Auch wenn ich nicht verstehe, warum es nicht funktioniert. Offentsichtlich hat die printf Funktion des Segfault verursacht. Als ich sie auskommentiert habe lief alles einwandfrei. Gut, eigentlich Fehler lag einige Zeilen weiter unten was aber nicht erklärt warum die printf-Funktion abstürzt.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH