Article View: de.comp.lang.c++
Article #143Borland C++ 3.1, Fehler in Speicherverwaltung?
From: Jens Ehlers
Date: Wed, 20 Sep 1995 11:28
Date: Wed, 20 Sep 1995 11:28
121 lines
5100 bytes
5100 bytes
Ich habe ein Problem.
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:
** TCA log data will be written to tca.log **
************************* INSIGHT SUMMARY ************************* v2.1 **
* Program : a.out *
* Arguments : Not available *
* Directory : /tmp_mnt/nfs/fs/fs1/mt2/je/test *
* Compiled on : Sep 13, 1995 16:45:33 *
* Run on : Sep 13, 1995 16:51:29 *
* Elapsed time : 00:00:40 *
* Leaked During Execution : 0 blocks, 0 bytes *
* Not Leaked/Outstanding On Exit : 0 blocks, 0 bytes *
* Total Outstanding Memory : 0 blocks, 0 bytes *
***************************************************************************
no leaks were found.
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?
- Wer kann den Fehler reprodozieren? Mit welcher Version von BC ?
- Existieren "Fehlerfreie" Versionen von BC?
- Ist die Ursache moeglicherweise eine Compileroption?
Jens
Das Programm:
/************************************
TEST je 9/95
**************************************/
#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);
if (!werte_b) fehler2(__FILE__,"Kein Speicher fuer werte_b");
printf("dauer_n=%lu\n",sizeof(unsigned int)*n_zeiten);
dauer = (unsigned int *) malloc(sizeof(unsigned int)*n_zeiten);
if (!dauer) fehler2(__FILE__,"Kein Speicher fuer dauer");
printf("ptr2 : %p \n",ptr2);printf("ptr2 : %p \n",ptr2);
printf("ptr2 : %p \n",ptr2);printf("ptr2 : %p \n",ptr2);
printf("ptr2 : %p \n",ptr2);printf("ptr2 : %p \n",ptr2);
printf("ptr2 : %p \n",ptr2);printf("ptr2 : %p \n",ptr2);
printf("werte_b : %p \n",werte_b);
printf("dauer : %p \n",dauer);
/* Speicher freigeben */
FREE(werte_b);
FREE(dauer);
};
printf("ENDE der Schleife\n");
return;}
/*************************************************************/
void fehler2 (char *funktion, char *text){
printf("\n");
printf("********************************************************\n");
printf("* Es ist ein Fehler aufgetreten. *\n");
printf("* Funktion: %-43s*\n",funktion);
printf("* Fehler : %-43s*\n",text);
printf("********************************************************\n");
exit(1);
}
/*************************************************************/
--
Jens Ehlers Hamburg, Germany
Tel. : +49 (0) 40 / 77 18 - 23 57
Fax. : +49 (0) 40 / 77 18 - 20 28
E-Mail: Ehlers@tu-harburg.d400.de
Technical Details
Message-ID:
<43otte$ndb@rztsun.tu-harburg.de>Path:
arc1-ca.pugleaf.net!news.tu-harburg.de!usenetShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.tu-harburg.de!usenet From: Jens Ehlers <Ehlers@tu-harburg.d400.de> Newsgroups: de.comp.lang.c++,;,de.comp.lang.c Subject: Borland C++ 3.1, Fehler in Speicherverwaltung? Date: 20 Sep 1995 11:28:46 GMT Organization: Technische Universtaet Hamburg-Harburg Message-ID: <43otte$ndb@rztsun.tu-harburg.de> NNTP-Posting-Host: jupiter.mt2.tu-harburg.de Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 1.1N (X11; I; HP-UX A.09.03 9000/710) X-URL: news://news.tu-harburg.de/de.comp.lang.c++#43muvb$16s7@c4.hrz.uni-giessen.de