2011-03-14 57 views
1

我已经在将要被从进展4GL应用程序调用某些C语言函数在努力,我发现自己有以下疑点:进展4GL调用C函数

C函数使用的malloc动态分配一个字符数组,并且想法是分配该内存的指针将返回到最初发送MEMPTR数据类型以保存C方法结果的Progress 4GL进程。

基本上,来自Progress的MEMPTR必须发送到C函数以“接收”C生成的数组,并在范围从de C函数返回时使用它(C方法“填充的两种语言之间的引用传递“MEMPTR进度变量)。

我的问题是:

当进度过程完成和MEMPTR变量“释放”,它释放在C函数分配的内存以及malloc的?

如果我释放在C函数我猜进展过程将收到的垃圾数据的malloc分配的内存,这是正确的吗?

感谢您的时间和帮助。

问候。

回答

3

4GL/ABL: How to Call WIN32 API Function: GetLongPathName

进展4GL不管理内存为您服务。您需要提供一种方法来释放/释放内存。

是的,如果你曾经访问免费()'d内存,访问它是不确定的 - 它可能会崩溃,它可能会给你垃圾数据,或者你的程序可以继续隆隆远没有错误。

声明:我正在进行的工作。

0

一般来说,在任何跨语言编程环境,这是一个坏主意,有或期望一种语言解除分配由其他分配的内存。分配资源的语言(如内存)应该有一个相应的调用来在客户端完成时释放资源。

下,在特定的没有垃圾收集,所以由它分配的任何内存必须手动释放。

有一个例外。在大多数(非嵌入式)平台上,当应用程序终止时,所有分配的资源将被回收。因此,如果分配是一次性启动类型的事情(而不是在一个循环或某物中完成),那么在程序退出时让操作系统回收它通常是可以的,而不必担心手动执行操作。