C4700: die nicht initialisierte lokale variable
Wenn ich diesen code kompilieren Sie sagt "error C4700: die nicht initialisierte lokale variable" b " verwendet werden." Ich bin mir nicht sicher, was ich jetzt tun um dieses problem zu beheben. Ich bin weder ein IT-student oder-Technikerin, aber ich sehr gerne lernen, C++, und ich Lerne es von mir. Ich habe auf diese für 1 Tag.
Vielen Dank
#include <stdio.h>
#include <iostream>
//A.
//1--
void InputArray(int *a, int &n)
{
printf("Insert n = ");
scanf("%d", &n);
a = new int[n];
for (int i=0; i<n; i++)
{
printf("Enter the key's a[%d] values: ", i);
scanf("%d",&a[i]);
}
}
void main()
{
int *b, m;
InputArray(b, m);
}
- Denken Sie über den Wert, der
b
hat, wenn Sie übergeben es an Ihre Funktion. - Möglich, Duplikat der Wie kann ich am besten Stille eine Warnung über nicht verwendete Variablen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
b
durch Wert übergeben wird, was bedeutet, dass eine Kopie gemacht wird, aber da es nicht initialisiert, erhalten Sie die Warnung. Einfach initialisieren:oder
Wenn Sie möchten, dass die Funktion zum ändern der Anrufer-variable, dann pass by reference:
Ihrer version geht die uninitialised Zeiger durch Wert; die Funktion ändert eine lokale Kopie davon, aber die Blätter
b
in seiner uninitialised Zustand.Die Zeiger sind nicht standardmäßig initialisiert, so dass Ihre variable
b
nicht initialisiert ist, dies ist die Quelle der Fehler. Sie haben zum initialisieren Sie diese variable, um dies zu beheben:Nachdem Sie dieses Update gibt es zusätzliche problem in deinem code. Es scheint aus der Art, wie Sie eine Funktion aufrufen, die Sie erwarten anhaltend ändern der Zeiger
b
an Sie übergeben, so dassb
wird in Speicher mitnew
nach der Funktion zurückgegeben. Aber übergeben Sie einen Zeiger-Wert, was bedeutet, dass änderungen in der Funktion nicht reflektiert werden, in der ursprünglichen variableb
die wird noch zeigen, was es wies vor dem Aufruf einer Funktion. (das array zugewiesen werden, innerhalb der Funktion und bleiben im Speicher nach der Funktion zurückgegeben, sondern Sie undicht wird dieser Speicher alsb
nicht in es). Um dies zu beheben, müssen Sie pass-pointer by reference:Auch: wo ist
delete
? Denken Sie daran: mappingnew
zudelete
ist bijection: jedernew
entspricht Einzelzimmerdelete
platziert irgendwo im code.Zuerst von allen, haben Sie gelernt, wie ein Zeiger, richtig ? denn wenn du weißt, wie man Zeiger u sollten wissen, dass, wenn Sie deklarieren einen Zeiger müssen auf NULL initialisiert, bevor Sie es verwenden können, korrigiert mich wenn ich falsch bin.
Beispiel
Es ist alles das gleiche, aber in einer anderen Weise
NULL
ist ein alias für0
auf den meisten Compilern. Auf der anderen Seitenullptr
ist ein echter Typ pointer und unterscheidet sich vonNULL
und0