Прогресс 4L SET-SIZE оператор и C - malloc - PullRequest
1 голос
/ 16 марта 2011

У нас есть общая библиотека, которая выделяет (используя malloc) память для массива char, который возвращается через MEMPTR в процедуру Progress.

В руководстве по OpenEdge я прочитал, что для освобождения MEMPTR Progress необходимо использовать инструкцию SET-SIZE и установить ее в ноль (0).

Поэтому мой вопрос заключается вthis:

SET-SIZE(mem-pointer) = 0.

также освобождается память возвращаемого массива, выделенного с помощью malloc в SL?

Если это не так, могу ли я создать функцию, которая послеProgress Process завершает освобождение выделенной памяти на C?

И, наконец, если мне нужно создать эту функцию, кто-нибудь может указать мне какое-то направление, справочное руководство или учебное пособие?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Лучшая практика - «создай, удаляй». Таким образом, ваш код 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#href=dvpin/15dvpinch08epi.17.1.html

0 голосов
/ 16 марта 2011

Я не знаком с Progress, но похоже, что вы могли бы сделать функцию dealloc в своей библиотеке c, которая принимает MEMPTR, освобождает неправильно распределенную память и после вызова из Progress освобождает MEMPTR в Progress. Если у вас был доступ к MEMPTR в первой функции c, вы должны иметь доступ к нему с помощью функции dealloc.

...