gpt4 book ai didi

memory-management - 试图分配已经分配的变量

转载 作者:行者123 更新时间:2023-12-04 02:20:06 27 4
gpt4 key购买 nike

我遇到以下例程问题,因为我得到Fortran 运行时错误:Attempting to allocate already allocated variable 'sb'。该功能对我来说似乎不错,但显然编译器不喜欢它。什么时候会发生 allocate 被调用两次?

当我在我的程序中第二次调用该函数时出现问题。

这是我的电话

sb = srepl (sa, "s/duda/duda:/g")
sc = srepl (sb, "s/ //g")

这是函数

Function srepl (sa, test, psutl) Result (sb)

Character (Len=:), Allocatable :: sb
Character (Len=*), Intent (In) :: sa
Character (Len=*), Intent (In), Optional :: test

Integer :: k
Character (Len=65) :: s, a, b, c, d

If (Present (psutl)) Then
Allocate (Character (Len=Len_trim(sa)) :: sb)
Return
End If

If (get (k) /= 3) Then
Allocate (Character (Len=Len_trim(sa)) :: sb)
sb = Trim (sa)
Return
End If

If (valid (test, a)) Then

s = Trim (a)

Else If (project (test, b)) Then

s = Trim (b)

Else

If (project (sa, c, d) Then
s = Trim (c)
Else
s = Trim (d)
End If

End If

Allocate (Character (Len=Len_trim(s)) :: sb)
sb = Trim (s)

End Function srepl

最佳答案

在执行另一次内存分配之前,您应该始终取消分配已分配的数组。当你想分配另一个内存时,你总是可以事先测试一个变量是否已经分配了内存,如果是,那么先释放它。

例如,我有一个变量myvar这是可分配的,我可以用函数 Allocated() 测试它,如果 myvar 将返回真已分配内存,否则为 false。

ALLOCATE( myvar(10) )

IF( ALLOCATED(myvar) ) DEALLOCATE( myvar )

或者你也可以:

IF( .NOT. ALLOCATED( myvar ) ) ALLOCATE( myvar(10) )

其中第二种情况只会在内存为空时分配内存。

关于memory-management - 试图分配已经分配的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com