Lokale Array-Rückgabe: Warnungen in C verstehen und vermeiden
Bedenken Sie den folgenden Codeausschnitt:
char *recvmsg(){ char buffer[1024]; return buffer; } int main(){ char *reply = recvmsg(); ..... }
Dies Code soll ein char-Array über die Funktion recvmsg() abrufen. Es wird jedoch eine Warnung ausgelöst:
warning C4172: returning address of local variable or temporary
Diese Warnung weist darauf hin, dass die Rückgabe von recvmsg() die Adresse einer lokalen Variablen ist, was unangemessen ist, da die Lebensdauer der Variablen endet, wenn die Funktion beendet wird.
Die Lösung: std::vector
Um dieses Problem zu beheben, ist die Verwendung einer Standardbibliothek ein besserer Ansatz Container wie std::vector
Der aktualisierte Code mit std::vector sieht folgendermaßen aus:
std::vector<char> recvmsg() { std::vector<char> buffer(1024); //.. return buffer; } int main() { std::vector<char> reply = recvmsg(); }
Zugriff auf Char-Daten:
Wenn Sie Wenn Sie auf die rohen Zeichendaten des Vektors zugreifen müssen, können Sie Folgendes verwenden:
void f(const char* data, size_t size) {} f(&reply[0], reply.size());
Mit dieser Methode können Sie den Vektor nahtlos integrieren mit C-APIs oder C-APIs, die char* erwarten.
New vermeiden:
Es wird allgemein empfohlen, die Verwendung von new in C zu minimieren. Indem Sie sich auf Container wie std::vector verlassen, vermeiden Sie die Notwendigkeit einer manuellen Speicherverwaltung, reduzieren potenzielle Speicherlecks und verbessern die Wartbarkeit des Codes.
Das obige ist der detaillierte Inhalt vonWarum generiert die Rückgabe eines lokalen Arrays in C eine Warnung und wie kann ich sie mit „std::vector' beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!