Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 03. February 2007, 11:19

Titel: Problem mit Globaler Struktur
Beitrag von: RedEagle 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
Titel: Re: Problem mit Globaler Struktur
Beitrag von: Korona 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.)
Titel: Re: Problem mit Globaler Struktur
Beitrag von: bluecode 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.
Titel: Re: Problem mit Globaler Struktur
Beitrag von: RedEagle 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
Titel: Re: Problem mit Globaler Struktur
Beitrag von: RedEagle 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..
Titel: Re: Problem mit Globaler Struktur
Beitrag von: bluecode am 09. February 2007, 20:58
Schick mir wenn es dir nichts ausmacht einfach mal den Code, dann schau ich mir das an.