我一直在使用一些将从Progress 4GL应用程序调用的C语言函数,我发现自己有以下疑问:
C函数使用malloc动态分配一个字符数组,其思路是分配该内存的指针将返回到Progress 4GL进程,该进程最初发送一个MEMPTR数据类型来保存C方法的结果。
基本上,必须将来自Progress的MEMPTR发送到C函数以“接收”C生成的数组,并在范围从de C函数返回时使用它(C语言“填充”的两种语言之间的引用传递MEMPTR进度变量)。
我的问题是:
当Progress进程完成并且MEMPTR变量被“释放”时,它是否也释放了C函数中malloc分配的内存?
和
如果我在C函数中释放malloc分配的内存,我猜测Progress进程将接收垃圾数据,这是正确的吗?
感谢您的时间和帮助。
问候。
答案 0 :(得分:3)
4GL/ABL: How to Call WIN32 API Function: GetLongPathName
Progress 4GL不会为您管理该内存。您需要提供一种方法来释放/释放该内存。
是的,如果你曾经访问过free()的内存,那么对它的访问就会变得不明确 - 它可能会崩溃,它可能会给你垃圾数据,或者你的程序可能会继续没有错误。
免责声明:我为Progress工作。
答案 1 :(得分:0)
通常在任何跨语言编程环境中,拥有或期望一种语言释放另一种语言分配的内存是一个坏主意。分配资源的语言(如内存)应该有一个相应的调用来在客户端完成它时解除分配它。
C特别没有垃圾收集,因此必须手动取消分配由它分配的任何内存。
有一个例外。在大多数(非嵌入式)平台上,应用程序终止时将回收所有已分配的资源。因此,如果分配是一次性启动只键入事物(而不是在循环或其他东西中完成),那么通常可以让OS在程序退出时回收它,而不是担心手动执行它。