【问题标题】:Swig + tcl + c++ (memory managment)Swig + tcl + c++(内存管理)
【发布时间】:2011-06-08 07:02:38
【问题描述】:

我在 tcl 中有一个过程,它再次使用 swig 创建的接口调用 c++ 方法。该过程返回一个指针列表。我使用

检查了 tcl 列表中单个元素的所有权
[lindex $listname 0] cget -thisown

它返回 0 而不是 1。

【问题讨论】:

  • 您的 Q 准确度是多少?我们不是读心术的人来阅读你脑海中的问题。
  • 为什么我得到的是 0 而不是 1?
  • 因为它不是所有的,按照规范。你为什么期待它被拥有?这会给您带来什么问题?
  • 实际上我正在验证传递给 tcl 过程的参数。如果参数是单个指针,则通过验证,但如果参数是有效指针列表,则此验证失败。当传递的列表被 tcl 中的任何其他过程返回时,就会发生这种失败。

标签: c++ tcl swig


【解决方案1】:

根据SWIG documentation on memory management,默认情况下,指针不属于(SWIG 绑定到)Tcl。如果 SWIG 弄错了,请使用 -acquire/-disown 操作来纠正它。例如:

[lindex $listname 0] -acquire

小心!错误的内存管理会导致混乱的崩溃或内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2018-12-17
    相关资源
    最近更新 更多