Heim >Backend-Entwicklung >C++ >Wie kann man in C sicher einen Zeiger auf eine lokale Variable zurückgeben?

Wie kann man in C sicher einen Zeiger auf eine lokale Variable zurückgeben?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 07:34:13397Durchsuche

How to Safely Return a Pointer to a Local Variable in C  ?

So geben Sie einen Zeiger auf eine lokale Variable in C zurück

In C wird im Allgemeinen davon abgeraten, einen Zeiger auf eine lokale Variable zurückzugeben , da der Speicherplatz der Variablen möglicherweise freigegeben wird, wenn die Funktion beendet wird. In bestimmten Szenarien kann es jedoch erforderlich sein, dies zu erreichen.

Stellen Sie sich ein Szenario vor, in dem Sie eine Funktion erstellen müssen, die einen Zeiger auf eine Ganzzahl zurückgibt:

int *count()
{
    int myInt = 5;

    int * const p = &myInt; // Pointer to the local variable

    return p;
}

In diesem Fall , entsteht das Problem, weil die Variable myInt beim Beenden der Funktion zerstört wird und der Zeiger auf einen ungültigen Speicherort zeigt.

Um dieses Problem zu beheben, können Sie smart verwenden Zeiger, die den der Variablen zugewiesenen Speicher automatisch verwalten. Sie können beispielsweise einen unique_ptr verwenden:

unique_ptr<int> count()
{
    unique_ptr<int> value(new int(5));
    return value;
}

Hier ist value ein unique_ptr, der den Speicher für die dynamisch zugewiesene Ganzzahl verwaltet. Dadurch wird sichergestellt, dass der Speicher der Ganzzahl beim Beenden der Funktion nicht freigegeben wird, sodass Sie über den zurückgegebenen Zeiger darauf zugreifen können:

cout << "Value is " << *count() << endl;

Das obige ist der detaillierte Inhalt vonWie kann man in C sicher einen Zeiger auf eine lokale Variable zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn