int StackRealloc(stack* S){
if ((S->array = realloc(S->array,sizeof(int)*(S->size)*2)) != NULL){
S->size = (S->size)*2;
return 1;
}
else return 0;
}
如何将此代码(c)转换为 Delphi(Delphi7)?
类似于 C 的 Delphi 函数realloc
是ReallocMem
.
如果您愿意,您可以将 C 结构直接翻译成 Delphi 记录,然后调用ReallocMem
. 但是在 Delphi 中,您很可能会使用动态数组而不是原始指针:
var
arr: array of Integer;
...
SetLength(arr, Length(arr)*2);
不需要同时包含数组和大小的结构,因为 Delphi 动态数组会跟踪它自己的长度。
更重要的是,您不会使用0
or1
作为您的返回值来表示错误。相反,您不会在代码中编写任何显式错误检查,并让运行时在调用SetLength
失败时引发异常。
由于您似乎正在实现一个堆栈,因此您可以使用TStack
该单元中的类Contnrs
。在现代 Delphi 中,您可以Generics.Collections.TStack<Integer>
改用。
顺便说一句,C代码被破坏了。它无法正确处理错误。如果调用realloc
失败,则NULL
返回。由于您将其存储到S->array
,因此您丢失了原始内存块的跟踪,因此会泄漏它。C 编程的黄金法则之一是永远不要编写:p = realloc(p, ...)
.