Поделиться через


Потерянная память

Если в распределенном приложении используется параметр указателя [ in, out, unique] или [in, out, ptr], серверная часть приложения может изменить значение параметра указателя на NULL. Когда сервер впоследствии возвращает клиенту значение NULL, память, на которую ссылается указатель до вызова удаленной процедуры, по-прежнему присутствует на стороне клиента, но больше не доступна из этого указателя (за исключением случаев полного указателя с псевдонимом). Эта память, как говорят, была потеряна. Это также называется утечкой памяти. Повторное удаление памяти на клиенте приводит к нехватке доступных ресурсов памяти.

Память также может быть потеряна, когда сервер изменяет внедренный указатель на значение NULL. Например, если параметр указывает на сложную структуру данных, такую как дерево, серверная часть приложения может удалить узлы дерева и задать для указателей внутри дерева значение NULL.

Другая ситуация, которая может привести к утечке памяти, связана с соответствующими, изменяющимися и открытыми массивами, содержащими указатели. Когда серверное приложение изменяет параметр, указывающий размер массива или передаваемый диапазон, таким образом, чтобы он представлял меньшее значение, заглушки используют меньшие значения для освобождения памяти. Элементы массива с индексами, превышающими значение параметра size, потеряны. Приложение должно освобождать элементы за пределами передаваемого диапазона.