使用free()释放C函数中的字符串(在Ada中分配)

Aka*_*kay 3 c string ada

我正在开发一个C-Ada绑定应用程序,我在Ada端使用分配一个新字符串Interfaces.C.Strings.New_String().

Interfaces.C.Strings已经有一个过程Free()来为字符串释放内存.因为我需要使用Interfaces.C.Strings.Chars_Ptr以下命令将此字符串传递给C函数:

  1. 如果我使用free()函数(在stdlib.h中声明)为C端的字符串释放内存,这样可以吗?

  2. 如果我从C端释放内存,这样安全吗?

  3. 或者我应该使用Interfaces.C.Strings.Free()Ada方面的功能更好地释放它?

Chr*_*phe 5

你应该在Ada方面释放这个字符串:

  • Ada API预见​​到了这一点,所以它是安全的
  • Ada API不保证使用C标准库分配内存(请参阅包参考)
  • 您不知道您使用的Ada实现的内部是否使用标准C库,或者它是否有自己的内存管理.因此,在C端释放它是非常危险的,因为释放未使用malloc/calloc分配的指针是未定义的行为.

  • 您可以将Interfaces.C.Strings.Free函数导出到C,然后从那里调用它.只要您调用Ada提供的功能,呼叫就不必在Ada代码中.(另外,语言是Ada,而不是ADA.它是以一个人命名的......) (3认同)
  • @George,如果必须在代码的c部分释放字符串,那么这是一个完美的选择 (2认同)