Compartir a través de


Huérfano de memoria

Si la aplicación distribuida usa un parámetro de puntero [ in, out, unique] o [in, out, ptr], el lado servidor de la aplicación puede cambiar el valor del parámetro de puntero a null. Cuando el servidor devuelve posteriormente el valor NULL al cliente, la memoria a la que hace referencia el puntero antes de la llamada al procedimiento remoto sigue presente en el lado cliente, pero ya no es accesible desde ese puntero (excepto en el caso de un puntero completo con alias). Se dice que esta memoria está huérfana. Esto también se denomina pérdida de memoria. El huérfano repetido de memoria en el cliente hace que el cliente se agote de los recursos de memoria disponibles.

La memoria también puede quedar huérfana siempre que el servidor cambie un puntero incrustado a un valor NULL. Por ejemplo, si el parámetro apunta a una estructura de datos compleja como un árbol, el lado servidor de la aplicación puede eliminar nodos del árbol y establecer punteros dentro del árbol en NULL.

Otra situación que puede provocar una fuga de memoria implica matrices compatibles, variables y abiertas que contienen punteros. Cuando la aplicación de servidor modifica el parámetro que especifica el tamaño de matriz o el intervalo transmitido para que represente un valor más pequeño, los códigos auxiliares usan los valores más pequeños para liberar memoria. Los elementos de matriz con índices mayores que el parámetro size están huérfanos. La aplicación debe liberar elementos fuera del intervalo transmitido.