使用Fillchar()时出现段错误/错误216

时间:2013-12-21 02:23:17

标签: pascal dynamic-memory-allocation

在我添加Fillchar()在pascal中查找C的memset()等效项后,程序会给出运行时错误216.

这是我的代码(如果我删除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;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

Fillchar采用无类型参数,而不是指针。因为它是用零覆盖指针本身(以及超出它的内存)。您希望取消引用指针以将其与Fillchar

一起使用
FillChar(sym^, SizeOf(foo), #0);

无类型参数是const foovar fooout foo形式的参数,似乎没有附加类型。它们不能直接分配或使用,但您可以取消引用它们并获取指向它们的指针。基本上,它们是语法糖,能够传递记录和其他变量,就好像它们是数据blob而不必从调用端指向它们的C风格(实际上它有点复杂,但那是它的要点)。