我试图从cpp中释放一个堆分配的Ada标记记录。我使用代码AdacoreU作为起始位置。
我在运行下面的代码时收到以下错误。
20
double free or corruption (out)
raised PROGRAM_ERROR : unhandled signal
我是不是想太多了?我需要一个基于Ada的释放机制吗?
我真实的的最终目标是什么?我想使用动态库来创建一个插件基础结构,其中每个库都是它自己的工厂,用于给定的类型。沿着于boost dll,但使用基于ada的动态库。
修改以下代码:
main.cpp
alib.ads
alib.adb
其他资源用作起点
3.11.3.5 Interfacing with C++ at the Class Level
我尝试了什么:
- 尝试创建Free过程时使用了类型和访问类型的各种组合
- 动物,类型Animal_Access是动物访问权限
- Animal'类,类型Animal_Class_Access是对Animal'类访问
- Animal,类型Animal_Access是对Animal类访问
- 在某个时候,我有这样的印象:我应该使用系统地址作为指向Animal对象的指针,作为New_Animal返回的一部分,或者作为Del_Animal的参数
我所期待的是:
我期望从Ada中清除Ada堆对象。
1条答案
按热度按时间s3fp2yjn1#
问题出在
Del_Animal
的in out
参数及其到C世界的Map上。您对
Del_Animal
的意图是它应该像Ada.Unchecked_Deallocation
一样工作,换句话说,在调用之后参数被设置为null
(或0
!),但这意味着您必须传递的是实参的 address。也就是说,
称为
参见ARM B3(68)。