Got ein wirklich subtiles Problem. Ich habe eine Klasse, die mit MS VS 2013 C++ Compiler kompiliert, für 32-Bit-Plattform hat die Größe von 4 Bytes. Der Funktionszeiger hat eine Größe von 4 Bytes. Aber wenn diese Klasse mit dem gleichen Compiler kompiliert wird, aber in einem anderen Projekt enthalten ist, um eine Bibliothek zu erzeugen, auch für 32-Bit-Plattformen, dann hat die Klasse den * m_Function-Zeiger, der 16 Bytes belegt! Wenn ich diese Klasse aus dem Hauptprojekt instanziiere, denkt sie natürlich, dass die Klasse 4 Byte belegt und genau diese Speichergröße zuweist, während sie in Wirklichkeit 16 Byte belegt und Speicherüberläufe verursacht.Größe des Zeigers zu Mitglied Funktion variiert wie verrückt
class CC1
{
public:
CC1();
void (CC1:: *m_Function)();
};
Ich weiß, dass die Größe der Zeiger-zu-Element-Funktion variieren kann. Aber die Frage ist - welche Compiler-Einstellung steuert das? Es ist mir egal, ist es 4 oder 16 Bytes - nur brauchen sie gleich zu sein. Die Ausrichtungseinstellungen für Strukteile sind für beide Projekte identisch./vmm/vmg Optionen? Keine Erwähnung von ihnen in Compiler-Einstellungen in beiden Projekten.
Übrigens habe ich versucht, für x64 Ziel zu bauen und in diesem Fall sizeof * m_Function ist immer 8 Bytes, aus Haupt- und Bibliotheksprojekt.
Vielen Dank.
ist http://blogs.msdn.com/b/oldnewthing/archive/2004/02 /09/70002.aspx – Lectral
Bauen Sie den gleichen Weg (IE Debug vs Release)? – NathanOliver
wahrscheinlich andere Build-Einstellungen (Ausrichtung, Debug-Informationen, etc ...) –