2017-09-19 37 views

回答

0

有專用於這個問題Wynsure發展規律一節中,查找節「14.3文本」我來總結一下: 文本變量是一個指針就會自動重新分配的緩衝區爲我們寫文本,因此,隨着文本的增長,更改或縮小,內存位置會有所不同。因爲這個原因,指針不是包含的。 eWAM會自動分配一個新的較大緩衝區,並將舊緩衝區的內容複製到新緩衝區,釋放舊緩衝區,然後更新MyText指針以指向新緩衝區。

淺作業 如果你真的不明白文本變量是如何工作的,那麼這是最危險的操作。

例如下面的代碼將崩潰(作爲一般規則,什麼會導致崩潰或者是訪問到已經被釋放的存儲器位置或釋放相同的存儲器位置的兩倍。)

MyText2 = MyText1 寫(MyText1,...) 空白(MyText1) 空白(MyText2)//崩潰

淺分配MyText2 = MyText1只需複製指針。它不重複緩衝區。

將文本從一個變量複製到另一個變量時,請使用深層複製:= 如果使用=它指向原始文本var地址。然後,當您將第二個文本設置爲空白時,它實際上將原始文本設置爲空白(處置)。

專用文本方法 文本有一些是正確處理它們,如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 
相關問題