fand ich zufällig dieses Problem auf C++, hatte aber total keine Ahnung, wie es passiert war, nutzen Sie bitte Code-Schnipsel überprüfen:Der Mechanismus der shared_ptr
int main() {
int *aptr = new int(20); //Declare an integer space with 20, and aptr points to it
shared_ptr<int> a(aptr); //Declare a shared_ptr to points where aptr points
stringstream ss;
ss << a;
const char *chstr = ss.str().c_str(); // Save the address as string
void *address;
sscanf(chstr, "%p", (void **)&address); // Convert string back to pointer
a = NULL; // Free the shared pointer
cout << *reinterpret_cast<int*>(address) << endl; // Output: 0, 20 has gone
return 0;
}
Gibt es jemand könnte mir sagen, warum die Adresse gewesen befreit ?
Ich habe den ursprünglichen Ganzzahlzeiger "aptr" nicht manipuliert, aber irgendwie ist der Platz verschwunden, wegen des shared_ptr?
Ich würde gerne wissen, wie es passiert ist, danke euch allen!
Gut. Du schießt in dein Bein und fragst dann "warum ist etwas falsch passiert"? Erstens: Sie speichern die Adresse der temporären Zeichenfolge, das ist wirklich schlecht.Zweitens: Sie weisen NULL shared_ptr zu, anstatt Reset aufzurufen. – ForEveR
Ich weiß nicht, was Sie erreichen wollen oder wirklich, was Sie fragen. Ich denke, Sie müssen den Unterschied zwischen Zeigern und den Dingen, auf die sie hinweisen, besser verstehen. –
.... a = NULL; nullpointer –