Verwaister Arbeitsspeicher
Wenn Ihre verteilte Anwendung einen [ in, out, unique oder ] in [ , out, ptr-Zeigerparameter verwendet, kann die Serverseite der Anwendung den Wert des Zeigerparameters in ] NULL ändern. Wenn der Server anschließend den NULL-Wert an den Client zurückgibt, ist der Arbeitsspeicher, auf den vom Zeiger vor dem Remoteprozeduraufruf verwiesen wird, weiterhin auf clientseitiger Seite vorhanden, kann jedoch nicht mehr von diesem Zeiger aus zugänglich sein (außer im Fall eines vollständigen Zeigers mit Alias). Dieser Arbeitsspeicher wird als verwaist bezeichnet. Dies wird auch als Speicherverlust bezeichnet. Wiederholtes Verwaisten des Arbeitsspeichers auf dem Client führt dazu, dass dem Client nicht genügend Arbeitsspeicherressourcen zur Verfügung stehen.
Der Arbeitsspeicher kann auch verwaist sein, wenn der Server einen eingebetteten Zeiger in einen NULL-Wert ändert. Wenn der Parameter beispielsweise auf eine komplexe Datenstruktur wie eine Struktur verweist, kann die Serverseite der Anwendung Knoten der Struktur löschen und Zeiger innerhalb der Struktur auf NULL festlegen.
Eine weitere Situation, die zu einem Speicherverlust führen kann, sind konforme, unterschiedliche und offene Arrays, die Zeiger enthalten. Wenn die Serveranwendung den Parameter ändert, der die Arraygröße oder den übertragenen Bereich angibt, sodass er einen kleineren Wert darstellt, verwenden die Stubs die kleineren Werte, um Arbeitsspeicher frei zu geben. Die Arrayelemente mit Indizes, die größer als der size-Parameter sind, sind verwaist. Ihre Anwendung muss Elemente außerhalb des übertragenen Bereichs frei geben.