Autor Thema: Problem mit Globaler Struktur  (Gelesen 2822 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« am: 03. February 2007, 11:19 »
Ich habe eine Sturktur memlist. davon brauche ich 2 Globlame zeiger.
//...

namespace mem
{
 
 memlist *UsedMemory;
 memlist *UnusedMemory;

//...

Wenn ich jetzt in der Funktion SetupMM() den Zeigern eine Adresse zuweise, wird geht diese nach beendigung der Funktion wieder verloren, und UsedMemory & UnusedMemory zeigen auf 0x0

//...

 bool SetupMM()
 {
  UsedMemory   = (memlist*)MEM_USEDMEMLIST;
  UnusedMemory = (memlist*)MEM_UNUSEDMEMLIST;

//...

warum?? wie kann ich meinen Compiler dazu bringen, nicht immer so'n scheiß zu machen??

Verwende gpp 3.2.3

Korona

  • Beiträge: 94
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. February 2007, 11:39 »
Der Code sollte eigentlich so funktionieren, wie du ihn da stehen hast. Es kann eigentlich nur sein, dass du die Pointer später wieder überschreibst. (Oder dass sie überschrieben werden, weil der Code falsch gelinkt ist etc.)

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #2 am: 03. February 2007, 13:58 »
Könnte es eventuell sein, dass du mem::UsedMemory & mem::UnusedMemory in einer Header so definierst und das dann in mehreren Sourcedateien inkludierst? Die sollten eigentlich in einer Header als extern deklariert sein und in nur einer Sourcedatei dann definiert werden.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #3 am: 03. February 2007, 15:20 »
Beide Deklarationen finden in der *.cpp - Datei statt, so wie sich das gehört ;)

zum Linken:
OUTPUT_FORMAT("binary")
INPUT( x:\reos\_ckernel\kernelexe.obj
      x:\reos\_ckernel\kernelc.obj
 
      x:\reos\_ckernel\mem.obj
     )
ENTRY(start)
SECTIONS
{
  .text 0x11A00 :
  {
    code = .; _code = .; __code = .;
    *(.text)
    *(.rodata)
    . = ALIGN(1);
  }
  .data  :
  {
    __CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) *(.ctors) LONG(0) __CTOR_END__ = .;
    __DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) *(.dtors) LONG(0) __DTOR_END__ = .;
   
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(2048);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(2048);
  }
 
  ___KERNELEND__ = .;
  end = .; _end = .; __end = .;
}
ps.: es werden natürlich wesentlich mehr Dateien gelinkt... (in der INPUT liste stehen 33 Dateien)

zum Kompilieren:
gpp -c -Os -nostdlib -fno-builtin -fno-rtti -fno-exceptions -o x:\reos\_ckernel\mem.obj x:\reos\_ckernel\mem.cpp

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #4 am: 09. February 2007, 14:23 »
Kann mir keiner helfen??
Bin echt total am Ende mit meinen Kompetenzen...

Es würde mir schon helfen, wenn ihr mir tipps gebt, wo evtl der Fehler leigt..

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 09. February 2007, 20:58 »
Schick mir wenn es dir nichts ausmacht einfach mal den Code, dann schau ich mir das an.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen