Speichererhaltung beim Konvertieren von char in wchar_t
Das Konvertieren von Zeichenarrays von ASCII in Unicode stellt eine Herausforderung hinsichtlich der Beibehaltung der zugewiesenen Zeichen dar Erinnerung. Ein Lösungsversuch könnte wie folgt aussehen:
<code class="cpp">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs(wc, c, cSize); return wc; }</code>
Dieser Ansatz greift jedoch aufgrund der lokalen Definition von wc zu kurz, die am Ende des Funktionsaufrufs freigegeben wird, was zu undefiniertem Verhalten führt.
Um diese Falle zu vermeiden, ist eine einfache Änderung erforderlich:
<code class="cpp">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs(wc, c, cSize); return wc; }</code>
In diesem angepassten Code wird wc dynamisch mit new zugewiesen, um seine Persistenz über den Funktionsaufruf hinaus sicherzustellen. Folglich liegt es in der Verantwortung des aufrufenden Codes, den zugewiesenen Speicher freizugeben, um Speicherlecks zu verhindern.
Das obige ist der detaillierte Inhalt vonWie konvertiert man char sicher in wchar_t und behält dabei den zugewiesenen Speicher bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!