我已经分配了一个像这样mystruct大小的"数组" n:
if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) {
/* handle error */
}
Run Code Online (Sandbox Code Playgroud)
后来,我只能访问p,不再拥有n.有没有办法只给出指针确定数组的长度p?
我认为它必须是可能的,因为free(p)就是这样.我知道malloc()它记录了它分配了多少内存,这就是它知道长度的原因; 也许有办法查询这些信息?就像是...
int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct)
Run Code Online (Sandbox Code Playgroud)
我知道我应该修改代码,以便我知道n,但如果可能,我宁愿不这样做.有任何想法吗?
我希望在以下函数中获得任何"记录"类型的大小.但似乎它不起作用:
function GetDataSize(P : Pointer) : Integer;
begin
Result := SizeOf(P^); // **How to write the code?**
end;
Run Code Online (Sandbox Code Playgroud)
例如,后续记录的大小为8个字节
SampleRecord = record
Age1 : Integer;
Age2 : Integer;
end;
Run Code Online (Sandbox Code Playgroud)
但GetDataSize(@a)总是返回1(当然,a是SampleRecord类型的变量).我该怎么办?
我注意到Delphi有一个程序过程New(var P:Pointer),可以分配内存块对应P指向的类型的大小.怎么能达到这个尺寸?