Eu uso a biblioteca SWIG carrays.i para criar um wrapper para acesso duplo a arrays. Se eu adicionar isso ao arquivo de interface: %array_functions(double, doubleArray);
, obtenho a próxima função disponível em tcl: new_doubleArray
, delete_doubleArray
, doubleArray_setitem
e doubleArray_getitem
. Minha pergunta é: se criar array com new_doubleArray
comando dentro do procedimento tcl ( testProc
), devo excluí-lo explicitamente delete_doubleArray
antes de retornar do procedimento? Pela lógica tcl, todas as variáveis locais são excluídas após a saída do procedimento, mas não tenho certeza sobre arrays SWIG. O exemplo do código é:
proc createArray {list} {
set length [llength $list]
set a [new_doubleArray $length]
for {set i 0} {$i<$length} {incr i} {
set iElem [@ $list $i]
if {[string is double -strict $iElem]==0} {
error "Element of list must be of type double"
}
doubleArray_setitem $a $i $iElem
}
return $a
}
proc testProc {list} {
set listArray [createArray $list]
return
}
Agradeço antecipadamente.
Sim, o SWIG está alocando memória no heap por meio do
new_doubleArray
e ela deve ser liberada explicitamente por meio dodelete_doubleArray
.