Warnung: Umwandlung von Zeiger in Integer unterschiedlicher Größe in C++

Naila Saad Siddiqui 15 Februar 2024
Warnung: Umwandlung von Zeiger in Integer unterschiedlicher Größe in C++

In diesem kurzen Artikel geht es um die Lösung für die Warnung Umwandeln von Zeiger in Integer unterschiedlicher Größe in C++. Die Warnung wird oft als Fehler auf verschiedenen Compilern angezeigt.

Warnung: Umwandlung von Zeiger in Integer unterschiedlicher Größe in C++

Der Compiler gibt Warnungen und Fehler aus, um den Programmierer darüber zu informieren, dass etwas mit dem Code nicht stimmt. Die Fehler verbieten die Ausführung des Codes, während Warnungen die Ausführung des Codes zulassen, aber manchmal kann diese Ausführung einige Probleme mit der Speicherverwaltung verursachen.

Daher wird empfohlen, Ihren Code vor der Ausführung von allen Warnungen und Fehlern zu bereinigen.

Die Warnung vom Zeiger in eine ganze Zahl unterschiedlicher Größe umwandeln tritt auf, wenn Sie versuchen, den Wert einer ganzen Zahl in einer Zeigervariablen zu speichern, wie im folgenden Code gezeigt.

int var = 897;
int* ptr;

ptr = var;  // this conversion is wrong

Der obige Code generiert je nach Compilertyp eine Warnung oder einen Fehler.

Ausgang:

Warnung zeigt

Diese Art der Konvertierung ist aus einigen Gründen falsch:

  1. ptr ist eine Variable vom Typ Zeiger, die zum Speichern der Adressen verwendet wird. Dies bedeutet, dass es auf einen Speicherort zeigen kann und dieser Speicherort einen bestimmten Wert gespeichert haben kann.

    Daher kann es keine Daten vom Typ int in sich selbst speichern. In dieser Pointer-Variablen können wir die Adresse von var speichern, nicht den Wert.

  2. Zweitens ist die Größe der beiden Variablen unterschiedlich, sodass bei dieser Konvertierung die Möglichkeit eines Datenverlusts besteht.

Wir können Folgendes tun, um diesen Fehler zu beheben.

int main() {
  int var = 897;
  int* ptr;

  ptr = &var;
  cout << "ptr contains: " << *ptr << endl;
  cout << "var contains: " << var << endl;
}

Dies ergibt die folgende Ausgabe.

Lösung des Fehlers