Article View: de.comp.lang.c++
Article #1236Re: Segment-Terror ?
From: Ullrich von Bassewitz
Date: Thu, 11 Jan 1996 21:19
Date: Thu, 11 Jan 1996 21:19
55 lines
2753 bytes
2753 bytes
Kay Hayen (kay@edition.bonbit.org) wrote:
> Ich habe gerade ein C Projekt auf Borland C++ 4.0x portiert und aergere
> mich jetzt tierisch.
>
> Was habe ich verbrochen, um in "faralloc" eine Exception 13 zu ernten? Das
> gleiche passiert auch bei malloc/calloc/farcalloc und soll laut Hilfe das
> Ueberschreiten eines Segmentes angeben. Das verstehe ich jedoch nicht,
> weil IMHO alloc einfach 0L zurueckgeben muss, wenn ein Fehler auftritt.
Schmunzel :-)
Ich nehme schwer an, dass das nicht ein Fehler von BC++, sondern von Dir
ist. Eine Exception 13 (0x0D) ist eine allgemeine Schutzverletzung,
vermutlich ueberschreibst Du irgendwo in Deinem Programm Speicher der Dir
nicht gehoert.
Ein Beispiel, wie Du sowas sehr elegant machen kannst ist z.B.:
char* strdup (const char* S)
{
return strcpy (malloc (strlen (S + 1)), S);
}
(Das ist mein Standard-Beispiel, wenn es darum geht, was fuer ueble Dinge
einem mit Pointern passieren koennen. Der richtige Code unterscheidet sich
nur in der Plazierung einer Klammer:
return strcpy (malloc (strlen (S) + 1), S);
) Klammer zu.
Eine solche Schutzverletzung ist kein Aergernis, sondern eine der besten
Erfindungen seitdem T.A.Edison die erste Gluehbirne gebaut hat: Sie macht
Dich naemlich auf Fehler aufmerksam, die Du ansonsten nicht oder nur schwer
entdecken wuerdest.
Normalerweise hilft Dir Dein Debugger, den Fehler zu lokalisieren, weil er
naemlich das Programm an genau der Stelle anhaelt, an der der Fehler
auftritt. Im Falle von Fehlern in den Heap-Strukturen ist das aber meistens
mitten im Code der RTL. Es gibt Software-Pakete, die malloc/free durch
geaenderte Versionen ersetzen, wobei bei der Belegung/Freigabe bestimmte
Checks durchgefuehrt werden (eigentlich gehoert die Verwendung eines solchen
Paketes zur Pflichtuebung fuer jeden Programmierer).
Sowas kann man im uebrigen auch selber schreiben, wenn Du mehr wissen willst,
dann kannst Du Dich gerne nochmal per Mail bei mir melden.
Zusammenfassung: Geh mal davon aus, dass der Fehler in Deinem Code liegt.
Gruss
Uz
--
Ullrich von Bassewitz uz@ibb.schwaben.com
Technical Details
Message-ID:
<KKH8B8LL@wuschel.ibb.schwaben.com>Path:
arc1-ca.pugleaf.net!wuschel.ibb.schwaben.com!not-for-mailReferences:
<60a1uDsxr5B@devil.edition.bonbit.org>Show Full Headers
Complete Article Headers
Newsgroups: de.comp.lang.c++,zer.z-netz.rechner.ibm.programmieren Path: arc1-ca.pugleaf.net!wuschel.ibb.schwaben.com!not-for-mail From: uz@wuschel.ibb.schwaben.com (Ullrich von Bassewitz) Subject: Re: Segment-Terror ? Date: 11 Jan 1996 21:19:42 GMT References: <60a1uDsxr5B@devil.edition.bonbit.org> Message-ID: <KKH8B8LL@wuschel.ibb.schwaben.com> Followup-To: de.comp.lang.c++,zer.z-netz.rechner.ibm.programmieren Reply-To: uz@ibb.schwaben.com Organization: Ingenieurbuero von Bassewitz X-Newsreader: TIN [version 1.2 PL2]