1

我们有一个共享库,它为 char 数组分配(使用 malloc)内存,该数组通过 MEMPTR 返回到 Progress 过程。

在 OpenEdge 手册中,我读到要释放 Progress MEMPTR,必须使用 SET-SIZE 语句并将其设置为零 (0) 。

所以我的问题是,通过这样做:

SET-SIZE(mem-pointer) = 0.

SL 中用 malloc 分配的返回数组的内存是否也被释放?

如果不是这种情况,我可以创建一个函数,在 Progress Process 完成后释放 C 分配的内存吗?

最后,如果我必须创建此功能,谁能指出我的方向、参考手册或教程?

4

2 回答 2

1

最佳实践是“你创建它,你删除它”。所以你的 C 代码应该在适当的时候清理它。然后在 4GL 代码中执行 set-size(0)。

文档在 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

于 2011-03-16T18:33:20.807 回答
0

我不熟悉 Progress,但似乎您可以在您的 c 库中创建一个 dealloc 函数,该函数采用 MEMPTR,释放分配的内存,并在从 Progress 调用它之后,释放正在进行的 MEMPTR。如果您可以在第一个 c 函数中访问 MEMPTR,那么您应该可以在 dealloc 函数中访问它。

于 2011-03-16T18:28:16.610 回答