Ist es undefiniertes Verhalten, Nullzeiger mit dem %pKonvertierungsspezifizierer zu drucken ? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Die Frage bezieht sich auf den C-Standard und nicht auf
Ist es undefiniertes Verhalten, Nullzeiger mit dem %pKonvertierungsspezifizierer zu drucken ? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Die Frage bezieht sich auf den C-Standard und nicht auf
Betrachten Sie die folgende Aussage: *((char*)NULL) = 0; //undefined behavior Es ruft eindeutig undefiniertes Verhalten hervor. Bedeutet das Vorhandensein einer solchen Anweisung in einem bestimmten Programm, dass das gesamte Programm undefiniert ist oder dass das Verhalten erst dann undefiniert...
Die Aussage printf("%f\n",0.0f); druckt 0. Allerdings ist die Aussage printf("%f\n",0); druckt zufällige Werte. Mir ist klar, dass ich eine Art undefiniertes Verhalten zeige, aber ich kann nicht herausfinden, warum genau. Ein Gleitkommawert, bei dem alle Bits 0 sind, ist floatmit dem Wert...
Dies ist ein Beispiel zur Veranschaulichung meiner Frage, die einen viel komplizierteren Code enthält, den ich hier nicht posten kann. #include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { printf("Hello\n"); a = a + 1000000000; } } Dieses Programm enthält undefiniertes...
Nehmen wir an, ich kompiliere schlecht geschriebenen C ++ - Quellcode, der undefiniertes Verhalten hervorruft, und daher (wie sie sagen) "kann alles passieren". Aus der Perspektive dessen, was die C ++ - Sprachspezifikation in einem "konformen" Compiler als akzeptabel erachtet, bedeutet "alles"...
Betrachten Sie dieses Thema als Fortsetzung des folgenden Themas: Vorherige Rate Undefiniertes Verhalten und Sequenzpunkte Lassen Sie uns diesen lustigen und verschlungenen Ausdruck noch einmal betrachten (die kursiven Sätze stammen aus dem obigen Thema * smile *): i += ++i; Wir sagen, dies ruft...
Wie wir wissen, ist ein vorzeichenbehafteter Ganzzahlüberlauf ein undefiniertes Verhalten . In der C ++ 11- cstdintDokumentation gibt es jedoch etwas Interessantes : Ganzzahliger Typ mit Vorzeichen mit einer Breite von genau 8, 16, 32 bzw. 64 Bit ohne Auffüllbits und Verwendung des...
Auf den ersten Blick scheint diese Frage ein Duplikat von Wie erkennt man einen Ganzzahlüberlauf? es ist jedoch tatsächlich deutlich anders. Ich habe festgestellt, dass das Erkennen eines vorzeichenlosen Ganzzahlüberlaufs zwar ziemlich trivial ist, das Erkennen eines vorzeichenbehafteten...
Ich bin auf das folgende C ++ - Programm ( Quelle ) gestoßen : #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i * 12345678 << std::endl; } Es sieht aus wie ein einfaches Programm und gibt die richtige Ausgabe auf meinem...
Wenn ich habe: unsigned int x; x -= x; Es ist klar, dass nach diesem Ausdruck Null sein x sollte , aber überall, wo ich hinschaue, sagen sie, dass das Verhalten dieses Codes undefiniert ist, nicht nur der Wert von x(bis vor der Subtraktion). Zwei Fragen: Ist das Verhalten dieses Codes tatsächlich...
Ich verstehe nicht ganz, warum ich keine Ausnahme durch Null bekomme: int d = 0; d /= d; Ich erwartete aber stattdessen eine Division durch Null-Ausnahme d == 1. Warum wird keine d /= dAusnahme durch Division durch Null ausgelöst, wenn d == 0?
Betrachten Sie dieses Programm: #include <stdio.h> int main(void) { unsigned int a; printf("%u %u\n", a^a, a-a); return 0; } Ist es undefiniertes Verhalten? Auf den ersten Blick aist eine nicht initialisierte Variable. Das deutet also auf undefiniertes Verhalten hin. Aber a^aund a-asind 0für...
Ich habe folgenden Code: #include <iostream> #include <complex> using namespace std; int main() { complex<int> delta; complex<int> mc[4] = {0}; for(int di = 0; di < 4; di++, delta = mc[di]) { cout << di << endl; } return 0; } Ich erwarte, dass es "0, 1, 2, 3"...
Diese Frage wird von mir motiviert, kryptografische Algorithmen (z. B. SHA-1) in C / C ++ zu implementieren, tragbaren plattformunabhängigen Code zu schreiben und undefiniertes Verhalten gründlich zu vermeiden . Angenommen, ein standardisierter Krypto-Algorithmus fordert Sie auf, Folgendes zu...
Ich frage mich über die Verwendung von Code wie folgt int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; Wenn die Schleife über nZeiten iteriert wird, factorwird sie mit 10genau nZeiten multipliziert . Wird factorjedoch immer erst verwendet, nachdem es...
AFAIK, obwohl wir kein statisches Speicherarray der Größe 0 erstellen können, können wir dies mit dynamischen tun: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined Wie ich gelesen habe, pverhält es sich wie ein One-Past-End-Element. Ich kann die Adresse drucken, auf die...
In Kapitel 5 von K & R (The C Programming Language 2nd Edition) habe ich Folgendes gelesen: Erstens können Zeiger unter bestimmten Umständen verglichen werden. Wenn pund qPunkt an den Mitgliedern des gleichen Array, dann Beziehungen wie ==, !=, <, >=etc. richtig funktionieren. Dies...
Ich habe in der folgenden Situation ein sehr seltsames Verhalten (bei Clang und GCC) festgestellt. Ich habe einen Vektor nodesmit einem Element, einer Klasseninstanz Node. Ich rufe dann eine Funktion auf nodes[0], die Nodedem Vektor eine neue hinzufügt . Wenn der neue Knoten hinzugefügt wird,...
Ist es gültig, eine Struktur zu kopieren, deren Mitglieder nicht initialisiert sind? Ich vermute, dass es sich um ein undefiniertes Verhalten handelt, aber wenn dies der Fall ist, ist es sehr gefährlich, nicht initialisierte Mitglieder in einer Struktur zu belassen (auch wenn diese Mitglieder...
Ich habe kürzlich eine Frage zum undefinierten Verhalten p < qin C beantwortet, wenn pund qZeiger auf verschiedene Objekte / Arrays sind. Das brachte mich zum Nachdenken: C ++ hat <in diesem Fall das gleiche (undefinierte) Verhalten , bietet aber auch die Standardbibliotheksvorlage,...