Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » großes array im DOS

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
09.10.2006, 22:39 Uhr
KBlaubaer



zauber zauber... 3 sternchen
aber danke, dann sollte ja zumindest das funktionieren...

Code:
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>

main(void)
{
unsigned int i,j,k;
unsigned long huge ***p = farmalloc (sizeof (unsigned long) * 40 * 40 * 40);

if(***p == NULL)
  printf("error\n");
else
{
  printf("ok\n");

  for(i=0;i<40;i++)
   for(j=0;j<40;j++)
    for(k=0;k<40;k++)
     p[i][j][k] = 0L;    // alles 0

  printf("fertig\n");
}

getchar();
return 0;
}



machts aber nicht

also sobald ich das array mit 0 füllen will, verabschiedet er sich...
auch bringt sizeof(p) nur mist...

ohje... ich bin schon ein Pflegefall sorry
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
09.10.2006, 22:50 Uhr
ao

(Operator)



C++:
if (p == NULL)
    printf ("error");


So heißt der Vergleich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.10.2006, 22:59 Uhr
KBlaubaer



ok, hab ich gepennt, aber das isses nicht... denn es kommt ja "ok"!
ersetze ich die "printf-ok" Zeile mit

printf("ok; size: %ld\n",sizeof(p));

sollte der doch: 256000 anzeigen, es steht aber müll drin...
sehen tue ich das nur, wenn ich das nullsetzen des array auskommentiere, weil dabei der Abflug passiert, heißt also wahrscheinlich schreibt der die Nullen in nicht "ge-malloc-ten" Bereich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
09.10.2006, 23:12 Uhr
KBlaubaer



Ich kriege echt 'nen Horn, wenn ich mir überlege wieviel Zeit ich für solch ein "Problem" verschwende... geschweige von eurer Hilfsbereitschaft.... Danke allen.
Ich kann nur mal zeigen wie das funktioniert mit einem Controller mit linearem Adressraum (int = long) :


Code:
typedef struct
{
unsigned int verbkl_verw[4][128][128];
} buf7;
buf7 *ptr7;

typedef struct
{
unsigned int verbkl_3k[40][40][40];
} buf9;
buf9 *ptr9;

main(void)
{
  ptr7 = (buf7 *) malloc(sizeof(buf7));
  ptr9 = ptr7;
}



Null Problem, ein Speicherbereich, wo ich je nachdem das eine oder andere array nutze.
Will nur sagen, das einzige was mir hier zu schaffen macht, ist dieses bekloppte 64kB-zerhacke... schnief. Das eigentliche Thema läuft schon so seit Jahren völlig problemlos... eben nur auf einem Motorola-Controller...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
10.10.2006, 00:22 Uhr
KBlaubaer



ok, einen nächtlichen Versuch hab ich noch...
Vorschlag, ich definiere ein großes statisches Feld und versuche die anderen über Zeiger einfach dort rein zusetzen... geht das?
gugge:


Code:
#include <stdio.h>
#include <stdlib.h>

unsigned long huge wert_all[0x12000L];
unsigned long huge *wertptr_all;
unsigned long huge ***wert_vb4;         // 40 40 40

int main(void)
{
unsigned long i;

wertptr_all = wert_all;
wert_vb4 = wert_all;              // wie mache ich das richtig?

printf("los gehts\n");
for(i=0;i<0x12000L;i++) wert_all[i] = 0x0L;

wert_vb4[0][0][0] = 122;
wert_vb4[8][0][0] = 123;
wert_vb4[32][0][0] = 124;

for(i=0;i<0x12000L;i++) if(wert_all[i] != 0L) printf("add %ld; wert %ld\n",i,wert_all[i]);

getchar();
return(0);
}



so kommt noch nix an, ich vermute die Zuweisung der Adresse von "wert_vb4" stimmt nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
10.10.2006, 07:57 Uhr
ao

(Operator)



Zitat von KBlaubaer:
printf("ok; size: %ld\n",sizeof(p));
sollte der doch: 256000 anzeigen, es steht aber müll drin...

p ist ein Pointer, d.h. sizeof (p) ist vermutlich 4 oder sowas. sizeof liefert keine Arraygrößen, wenn man einen Pointer reinsteckt, das steht aber in *jedem* C-Buch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
10.10.2006, 08:02 Uhr
ao

(Operator)



Zitat von KBlaubaer:
ok, einen nächtlichen Versuch hab ich noch...
Vorschlag, ich definiere ein großes statisches Feld und versuche die anderen über Zeiger einfach dort rein zusetzen... geht das?

Ja, das würde auch gehen, dadurch wird die .exe-Datei um 256 KByte größer, aber das ist vielleicht egal.

Warum es noch nicht klappt, weiß ich nicht. 16-Bit-DOS ist Steinzeit, so einen Compiler hab ich schon lange nicht mehr. Du musst im www suchen, ob du irgendwo ne Doku dazu auftreiben kannst, vielleicht findest du auch ein Forum, das sich mit Embedded-DOS oder so beschäftigt.

Oder frag beim Hersteller des PCs an. Die verkaufen das Ding, die sollten wissen, wie man das programmiert.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: