1

我一直在使用一些将从 Progress 4GL 应用程序调用的 C 语言函数,我发现自己有以下疑问:

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

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

我的问题是:

当 Progress 进程完成并且 MEMPTR 变量被“释放”时,它是否也释放了 C 函数中分配的 malloc 内存?

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

感谢您的时间和帮助。

问候。

4

2 回答 2

3

4GL/ABL:如何调用 WIN32 API 函数:GetLongPathName

Progress 4GL 不会为您管理该内存。您需要提供一种方法来释放/释放该内存。

是的,如果你曾经访问过 free() 的内存,那么对它的访问就会变得不确定——它可能会崩溃,它可能会给你垃圾数据,或者你的程序可以继续运行而不会出错。

免责声明:我为进步工作。

于 2011-03-14T17:40:16.133 回答
0

通常在任何跨语言编程环境中,让或期望一种语言释放由另一种语言分配的内存是一个坏主意。分配资源(如内存)的语言应该有一个相应的调用来在客户端完成它们时释放它。

特别是 C 没有垃圾收集,因此必须手动释放它分配的任何内存。

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

于 2011-03-14T17:50:30.260 回答