0

我在语句 text1=text2 的编译模式下遇到错误。该声明有什么问题,我们该如何解决?

4

1 回答 1

0

在 Wynsure 开发规则中有一个部分专门针对这个问题,查找“14.3 文本”部分我将总结:文本变量是指向缓冲区的指针,在我们写入文本时会自动重新分配,因此内存位置随着文本的增长、变化或缩小而不同。出于这个原因,指针不是恒定的。eWAM 自动分配一个新的更大的缓冲区并将旧缓冲区的内容复制到新缓冲区,释放旧缓冲区,然后更新 MyText 指针以指向新缓冲区。

浅层赋值 如果你真的不了解文本变量是如何工作的,这是最危险的操作。

例如,下面的代码会崩溃(通常会导致崩溃的原因是访问已释放的内存位置或两次释放相同的内存位置。)

MyText2 = MyText1 Write(MyText1, ....) Blank(MyText1) Blank(MyText2) // 崩溃

浅赋值 MyText2 = MyText1 只是复制指针。它不复制缓冲区。

将文本从一个变量复制到另一个变量时,请使用深拷贝 := 如果使用 =,则它指向原始文本 var 地址。然后当您将第二个文本设置为空白时,它实际上将原始文本设置为空白(处置)。

专用文本方法 Text 有许多可以正确处理它们的自定义方法,例如 var.type.write 函数 var.type.blank 函数

Procedure Test
   var tmpText : Text
   tmpText.type.Write(‘Hello’, @tmpText)
   tmpText.type.blank(@tmpText)
endProc

请注意,我们总是需要在移动内容后将旧变量文本清空,以免内存泄漏。

 procedure AnotherProcedure
      Var MyText : Text
      Var tmpText : text
      tmpText= GetXXXText
      Write(MyText, tmpText )
      tmpText.type.blank(@tmpText)
    endproc
于 2017-09-19T16:15:22.310 回答