Warum bekomme ich eine Sigill, wenn ich einen Uint64 in ein Doppel umwandle?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Warum bekomme ich eine Sigill, wenn ich einen Uint64 in ein Doppel umwandle?

Post by Anonymous »

Ich verlinke mit der Jolt Physics Library und kann mein Projekt auf dem Desktop keine Probleme erstellen. Auf Android kann ich über USB auf meinem physischen Gerät installieren und es debuggen, und dieser Fehler kommt nicht auf. Wenn ich mein Programm jedoch über das virtuelle Gerät in Android Studio ausführe, beendet mein Programm mit einem Sigill: < /p>
// In Math.h
/// Representations of true and false for boolean operations
inline static const double cTrue = BitCast(~uint64(0));
< /code>
Wenn es hier der dynamische Initialisierer ausführt, der Bitcast aufruft. Dann sieht in der Bitcast -Funktion so aus: < /p>
// Simple implementation of C++20 std::bit_cast (unfortunately not constexpr)
template
JPH_INLINE To BitCast(const From &inValue)
{
static_assert(std::is_trivially_constructible_v);
static_assert(sizeof(From) == sizeof(To));

union FromTo
{
To mTo;
From mFrom;
};

FromTo convert;
convert.mFrom = inValue;
return convert.mTo;
}
< /code>
Zu diesem Zeitpunkt, an dem die Funktion Convert.mto (bei der Rückkehr aus der Funktion) zurückgibt: < /p>
Signal: Sigill (Signal sigill: illegaler Operand) < /p>
und der Prozess verletzt mit -1. Jetzt habe ich das noch nie gesehen, und dies geschieht nur mit dem virtuellen Gerät in Android Studio, ich würde gerne wissen, warum. Alles, was es tut, ist ein UINT64 an das Gewerkschaftsmitglied zu schreiben und dann die Gewerkschaft als Doppel zu lesen: < /p>
FromTo convert;
convert.mFrom = inValue;
return convert.mTo;
< /code>
Warum bekomme ich ein Sigill? Ich erinnere mich, dass ich einmal gelesen habe, dass es nicht definiert ist, von einem Gewerkschaftsmitglied zu lesen, an das nicht das zuletzt geschrieben wurde. Ist dieses undefinierte Verhalten? Ich glaube, die Regeln haben sich in Bezug auf dies geändert, da C ++ neue Standards durchläuft. Oh, und mein physisches Telefon leitete den ARM64-V8A Abi und alle virtuellen Geräte auf Android Studio. Ich bin mir nicht genau sicher, was sie sind, weil sie auflisten: < /p>
ABI: x86_64
Translated ABI: arm64-v8a
< /code>
Was auch immer das bedeutet. Und ich kompiliere mit C ++ 20. < /P>
Bearbeiten: Es ist nicht die Tatsache, dass es sich um eine Vereinigung handelt. Ich habe es geändert in: < /p>
return *std :: waunder ((zu *) & unschätzbar); < /p>
und ich bekomme immer noch den Sigill. Seltsam. oder irgendetwas.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post