🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #143

Borland C++ 3.1, Fehler in Speicherverwaltung?

#143
From: Jens Ehlers
Date: Wed, 20 Sep 1995 11:28
121 lines
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!usenet

Show 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