2013-12-21 40 views
1

當我加入Fillchar()後尋找做C'S memset()相當於帕斯卡程序給一個運行時錯誤216賽格故障/錯誤216使用Fillchar()

這裏是我的代碼(如果我刪除FillChar(),它工作正常):

function NewFoo(name : string) : ptrfoo; 
var sym : ptrfoo; 
begin 
    new(sym); 
    FillChar(sym, SizeOf(foo), #0); 
    sym^.name := name; 
    NewFoo := sym; 
end; 

foorecordfooptr到它定義爲type fooptr = ^foo;一個指針。

我該如何解決這個問題?

回答

4

Fillchar需要無類型參數,而不是指針。因爲它是用零覆蓋指針本身(以及超出它的內存)。你想取消引用指針與Fillchar使用它:

FillChar(sym^, SizeOf(foo), #0); 

非類型參數的形式爲const foovar fooout foo的參數看似無類型重視他們。它們不能直接分配或使用,但可以取消引用它們並獲得指向它們的指針。基本上,它們是語法糖,能夠將記錄和其他變量傳遞給數據塊,而不必從調用端獲取C風格的指針(實際上它稍微複雜一點,但那是它的要點)。

+0

非常感謝。我在互聯網上搜索了很多如何做動態分配的例子,並用零填充'malloc()/ memset()'C世界,所以與我的代碼相比,但我找不到。 –

+2

@ TheMask這是等價的(或多或少)。 Pascal語義與C不一樣,如果你來自C背景,這可能是最令人討厭的區別。它只是需要一些習慣。 – Thomas