0

我正在用 TCL 编写一个脚本,该脚本来源于 Cadence 的 Encounter Digital Implementation Shell。它递归地执行许多 TCL 过程,然后突然退出代码说 - '嵌套评估太多(无限循环?)'。我找到了出错的proc,并检查了作为参数传递的变量。所有数值都是正常的。

我附上了 proc 出错的部分。(整个脚本是 1000 行以上,所以只提这部分)。

for {set i 1} {$i<=[llength $xcoord_sinks_for_clone($clone_to_regroup_ref)]} {incr i} {
        set abs_dist_list($i) ""
        set count 0

        foreach clone $new_clone_index_ref2 {
            set dist($i) [expr [distance [lindex $xcoord_sinks_for_clone($clone_to_regroup_ref) [expr $i-1]] [lindex $xcoord_clones [expr $clone_to_regroup_ref-1]] [lindex $ycoord_sinks_for_clone($clone_to_regroup_ref) [expr $i-1]] [lindex $ycoord_clones [expr $clone_to_regroup_ref-1]]]-[distance [lindex $xcoord_sinks_for_clone($clone_to_regroup_ref) [expr $i-1]] [lindex $xcoord_clones [expr $clone-1]] [lindex $ycoord_sinks_for_clone($clone_to_regroup_ref) [expr $i-1]] [lindex $ycoord_clones [expr $clone-1]]]]
            set dist_abs($i) [expr abs($dist($i))]
            lappend abs_dist_list($i) $dist_abs($i)
            incr count
        }
        set sorted_dist_abs($i) [lsort -real $abs_dist_list($i)]
        lappend min_dist [lindex $sorted_dist_abs($i) 0]
    }

我能够查明错误的位置。一切都根据脚本进行,直到 foreach 循环中的“set dist($i).....”分配之前。

是否存在一些内存分配问题?(该脚本在负载共享设施上运行)

请帮帮我!!

4

2 回答 2

0

如果你得到一个关于递归的错误,这意味着一个函数正在调用它自己。如果您发布的代码是distanceproc 的一部分,并且代码会自行调用distance,那可能就是问题所在。

于 2013-12-04T18:04:55.557 回答
-1

您可以尝试增加递归限制,例如:

set old_limit [interp recursionlimit {}]
set limit_increment 2000
interp recursionlimit {} [expr {$old_limit + $limit_increment}]

# execute recursive procedure

interp recursionlimit {} $old_limit
于 2013-12-02T15:31:12.953 回答