Прогресс 4L SET-SIZE оператор и C - malloc
У нас есть общая библиотека, которая выделяет (используя malloc) память для массива char, который возвращается через MEMPTR в процедуру Progress.
В руководстве по OpenEdge я прочитал, что для освобождения MEMPTR Progress необходимо использовать оператор SET-SIZE и установить его в ноль (0) .
Поэтому мой вопрос заключается в следующем:
SET-SIZE(mem-pointer) = 0.
освобождается ли память возвращаемого массива, выделенного с помощью malloc в SL?
Если это не так, могу ли я создать функцию, которая после завершения процесса выполнения освобождает выделенную память C?
И, наконец, если мне нужно создать эту функцию, может кто-нибудь указать мне направление, справочное руководство или учебное пособие?
2 ответа
Лучшая практика - "ты создаешь это, ты удаляешь это". Таким образом, ваш код C должен очистить его в соответствующее время. А затем выполните set-size(0) в коде 4GL.
Документация находится в руководстве ABL "Интерфейсы программирования". Все они онлайн на http://communities.progress.com/pcom/docs/DOC-16074
Глава, которую вы хотите, это:
http://documentation.progress.com/output/OpenEdge102b/oe102bhtml/wwhelp/wwhimpl/js/html/wwhelp.htm
Я не знаком с Progress, но кажется, что вы могли бы сделать функцию dealloc в своей библиотеке c, которая принимает MEMPTR, освобождает испорченную память и после вызова из Progress освобождает MEMPTR в Progress. Если у вас был доступ к MEMPTR в первой функции c, вы должны иметь доступ к нему в функции dealloc.