Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wert aus Struktur verändert sich von Selbst!?!?

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 ]
000
24.07.2008, 17:35 Uhr
TOSHMAX



Hallo erstmal an alle,
ich programmiere schon seit längerem mit C++ und der WINAPI und habe ein riesiges Problem. Ich habe eine Klasse und eine Struktur die Variablen der Klasse ersetzt und speichert. Nachdem ich die Werte setze werden sie durch irgendwelche anderen ersetzt.
Ich hoffe einer von euch kennt dieses Problem oder weiß eine Lösung.
Gruß TOSHMAX
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.07.2008, 18:55 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Quellcode kann helfen das Problem zu verstehen...

Kann es ein Zeiger bzw. Referenzproblem sein. Also das mit Wertekopien gearbeitet wird die nach durchlaufen der "Mehtode" nicht mehr existieren?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.07.2008, 19:01 Uhr
xXx
Devil


Denk mal dass du nen Zeiger auf was falsches Zeigen hast und damit dann ein wenig im Speicher für Unordnung sorgst Nur so ne Vermutung :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.07.2008, 13:30 Uhr
TOSHMAX



Also hier ist ist der Code:

C++:
struct TBSTRUCT
{
    HWND Toolbar;
    HWND Parent;
    HWND Buttons[];
    WNDPOS Pos;
    WNDSTYLE Style;
    char NOTUSED;
    SIZE BmpSize;
    RECT Limit;
    RECT Line;
    int Number;
};
class HTOOLBAR
{
    private:
        TBSTRUCT Struct;
        void AddToolbar(HWND);
    public:
        HWND Create(HWND,WNDSTYLE,STB_BUTTON*,int,LPRECT,HINSTANCE,int,int);
        void SetStruct(TBSTRUCT);
        TBSTRUCT GetStruct();
};

Die Variable NOTUSED in der Struktur brauche ich da er sonst auch den cx-Wert von der BmpSize verändert. Jetzt verändert er statt BmpSize eben NOTUSED.
Bis auf BmpSize und Buttons ist mir noch kein Wert aufgefallen der sich verändert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.07.2008, 13:44 Uhr
xXx
Devil


dann zeig mal die setstruct methoe oder was auch immer, in der du deine tbstruct nutzt!
(welche Größe vermutest du eigtl. für "Buttons"? )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.07.2008, 13:56 Uhr
TOSHMAX




C++:
void HTOOLBAR::SetStruct(TBSTRUCT _TbStruct)
{
    Struct = _TbStruct;
    HTOOLBAR_HWND[Struct.Number].hTool = *this;
}
TBSTRUCT HTOOLBAR::GetStruct()
{
    return Struct;
}

In HTOOLBAR_HWND speichere ich das Objekt um später darauf zugreifen zu können ohne globale Variablen anlegen zu müssen. Von dem hole ich mir dann auch sein Struct, verändere es etwas und speichere es wieder ab. Manchmal sind die Werte 5-Mal hintereinander gleich und ein anderes Mal sind sie beim ersten Mal anders.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.07.2008, 12:37 Uhr
~xXx_off
Gast


Dann schreib mal nen Copy-Konstruktor und operator= für deine Struktur und kopier den Array anständig.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.07.2008, 16:55 Uhr
TOSHMAX



Tut mir Leid aber ich versteh nicht ganz was du damit meinst. Mir ist aber aufgefallen das sich die Werte verändern wenn ich andere Werte aus der Struktur verändere. Vielleicht hilft euch das weiter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.07.2008, 17:36 Uhr
0xdeadbeef
Gott
(Operator)


Es ist schon ein ziemlich merkwürdiger Compiler, der

C++:
struct TBSTRUCT
{
    HWND Toolbar;
    HWND Parent;
    HWND Buttons[];
    WNDPOS Pos;
    WNDSTYLE Style;
    char NOTUSED;
    SIZE BmpSize;
    RECT Limit;
    RECT Line;
    int Number;
};


kompiliert. Ein Array braucht eine Dimension, in der Form hat es keinen kompletten Typen. Ich kann nur raten, dass er daraus ein Array der Länge 0 oder etwas Vergleichbares macht. In dem Fall erzeugst du jedes mal, wenn du auf Buttons zugreifst, einen buffer overflow, und schreibst deine Buttons in die dahinterliegenden Struct-Elemente.

Gib Buttons eine Länge, oder, wenn du keine feste Länge angeben kannst, benutz std::vector.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 26.07.2008 um 17:37 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.07.2008, 19:27 Uhr
xXx
Devil


(weshalb ich bereits oben nachgefragt hab, was er glaub was Buttons für ne Größe hat ... )
Wüsste auch nicht wie der compiler es interpretiert, hab mal angenommen als einfach HWND* Buttons ... dann müsste er dynamisch speicher anfordern und Copy-Konstruktor überschreiben
 
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: