Article View: de.comp.lang.c++
Article #144Re: Borland C++ 3.1, Fehler in Speicherverwaltung?
From: Michael Strauch
Date: Wed, 20 Sep 1995 12:31
Date: Wed, 20 Sep 1995 12:31
79 lines
3459 bytes
3459 bytes
Jens Ehlers (Ehlers@tu-harburg.d400.de) wrote:
> Bei einem von mir geschriebenen Programm bekamm ich zur laufzeit
> die Meldung:
> Speicherzuordnugsfehler
> COMMAND kann nicht geladen werden, System angehalten
> Ich habe das Programm schrittweise verkleinert, um den Fehler einzugrenzen,
> was mich viele Stunden Arbeit gekostet hat.
> Die for Schleife hat den Zweck den Fehler sicherer zu bemerken.
> Das Programmfragment (s. unten) enth"alt mit hoher Sicherheit keinen Fehler.
> Ich habe es auf drei verschiedene Unix Workstations (Apollo, HP 700, IBM)
> "ubertragen. Auf allen drei Rechnertypen l"auft das Programm problemlos.
> Das Syntaxanalysewerkzeug {\tt lint} endeckt keine Fehler.
> Das Laufzeitanalysesystem Insight (IBM/AIX) hat keine
> Speicherbereichs"uberschreitungen oder andere Fehler festgestellt:
> ...
> Mit Borland C++ 3.1 bekomme ich jedoch weiterhin den Laufzeitfehler,
> allerdings nur wenn ich das Speichermodell Large benutze.
> Meine Frage/Bitte:
> - Ist die Speicherverwaltung von Borland C++ fehlerhaft?
Jein. Im Gegensatz zu Deinen C-Compilern auf den Unix-Workstations
(welche garantiert alle 32-bittig sind), ist Borland C 3.1 nur
16-bittig. Ob man das als Fehler ansehen will, bleibt wohl jedem
selbst ueberlassen. In der Praxis heisst das i. W.: kein "malloc" mit
mehr als 64 KB!
> ...
> #include<stdlib.h>
> #include<stdio.h>
> #define FREE(ptr) if (ptr) {free(ptr);ptr=NULL;}
> #define ANZ 20000
> int main(int argc, char *argv[]);
> void fehler2 (char *funktion, char *text);
> void messe(int cfg[ANZ]);
> /*************************************************************/
> int main(int argc, char *argv[]){
> int cfg[ANZ];
> messe(cfg);
> return 0;}
> /*************************************************************/
> void messe(int cfg[ANZ]){
> short *werte_b=NULL; /* Basis des Speicherbereichs */
> float *ptr2=NULL;
> unsigned *dauer=NULL;
> unsigned long werte_n;
> unsigned long n_zeiten;
> int n_kanaele=2;
> for (n_zeiten=100;n_zeiten<=40000;n_zeiten+=100){
> printf("**************************\nn-zeiten= %f\n",1.0*n_zeiten);
> werte_n = (n_zeiten*n_kanaele )*sizeof(short);
> /* Speicher anfordern */
> printf("werte_n=%lu\n",werte_n);
> werte_b = (short *) malloc(werte_n);
> ...
Hier haben wir es ja: n_zeiten=40000, n_kanaele=2, sizeof(short)=2, gibt
werte_n=160000, also deutlich zuviel fuer das malloc.
Tip von mir: besorg Dir GNU-C/C++, dann hast Du solche Probleme nicht.
- Michael -
--
***************************************************************************
* Michael Strauch * email: *
* University of Dortmund * strauch@emmy.mathematik.uni-dortmund.de *
* Department of Mathematics * *
***************************************************************************
Technical Details
Message-ID:
<43p1ij$lpm@nx2.hrz.uni-dortmund.de>Path:
arc1-ca.pugleaf.net!Uni-Dortmund.DE!strauchReferences:
<43otte$ndb@rztsun.tu-harburg.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!Uni-Dortmund.DE!strauch From: strauch@emmy.mathematik.uni-dortmund.de (Michael Strauch) Newsgroups: de.comp.lang.c++,;,de.comp.lang.c Subject: Re: Borland C++ 3.1, Fehler in Speicherverwaltung? Followup-To: de.comp.lang.c++,;,de.comp.lang.c Date: 20 Sep 1995 12:31:15 GMT Organization: HRZ, University of Dortmund, Germany Message-ID: <43p1ij$lpm@nx2.hrz.uni-dortmund.de> References: <43otte$ndb@rztsun.tu-harburg.de> NNTP-Posting-Host: emmy.mathematik.uni-dortmund.de X-Newsreader: TIN [version 1.2 PL2]