memcpy() und __int64
-
Willst du wirklich eine binäre Kopie oder eine logische?
-
Nun habe ich gelesen, dass sich memcpy unter Verwendung solch grosser Datentypen undefiniert verhält
Nehme eher an dass es sich in deinem fall undefiniert verhält weil ptarget nicht initialisiert ist.
Kurt
-
Na also, dass ptarget initialisiert ist, ist ja wohl klar. Ich kann ja nicht die ganzen 2000 Programmzeilen posten.
-
Any schrieb:
Willst du wirklich eine binäre Kopie oder eine logische?
Die Kopie soll schon binär sein.
@ ROFLMAO: danke, verarschen kann ich mich selber.

-
http://www.lugbz.org/documents/smart-questions_de.html
aber ein beispiel wenigstens...
-
Praetorian schrieb:
Na also, dass ptarget initialisiert ist, ist ja wohl klar. Ich kann ja nicht die ganzen 2000 Programmzeilen posten.
Und ich kann dir ohne code ( müssen ja nicht alle 2000 zeilen sein ) nur sagen dass es memcpy egal ist wieviele bytes es hin und her schaufelt.
Kurt
-
Also gut, nochmal von vorne: Es tut mir Leid, dass meine Posts offenbar missverstanden wurde, ich will hier niemanden beleidigen!
Hier ein etwas konkreteres Beispiel:
char * carray = new char [1000]; char * ptarget = & carray [0]; ... // hier fülle ich carray mit diversen Daten auf und verschiebe ptarget dabei immer weiter nach hinten (-> "Schreibkopf") __int64 value = 123456; memcpy (ptarget, &value, 8);Ich benutze memcpy() im ganzen Programm über 100 Mal mit diversen Source-Zeigertypen von char bis long, aber bei __int64 scheint es Probleme zu geben.
-
das ist nicht der fehler.
kompilierbares darstellendes minimalbeispiel bitte.
-
Der Fehler liegt an anderer Stelle.
-
memcpy kann das:
#include <cstdlib> #include <iostream> int main(int argc, char *argv[]) { __int64 iTest = 400000000; iTest *= 400000000; std::cout << iTest << std::endl; char Text[sizeof(__int64)]; memcpy(Text,&iTest,sizeof(__int64)); std::cout << *(reinterpret_cast<__int64*>(Text)) << std::endl; system("PAUSE"); return EXIT_SUCCESS; }mfg.
-
Wenn Dir das nicht um die Ohren fliegt, ist das nur Glück.
Vermutlich ist sizeof( __int64) != 4 (nehme ich wenigstens mal an)...
-
niemand schrieb:
Wenn Dir das nicht um die Ohren fliegt, ist das nur Glück.
Vermutlich ist sizeof( __int64) != 4 (nehme ich wenigstens mal an)...Ja hab ich auch gerade gesehen, schon behoben.
mfg.
-
Bei mir gehts. Des weiteren ist __int64 kein Standarddatentyp, und ich würde fast tippen er ist 8 Bytes groß

Gruß