Jus*_*tMe 1 delphi pointers memory-management delphi-7 virtualtreeview
我正在尝试修改VirtualTreeView以在设计模式下查看树节点中的数据.
分配节点内存是私有静态方法,因此我无法做任何事情.我正在尝试重新分配内存以匹配新的大小.
出于测试目的,我正在尝试重新分配相同数量的内存:
ReallocMemory(Node, sizeof(Node^))
Run Code Online (Sandbox Code Playgroud)
但IDE在随机迭代中挂起了大量的AV.由于我对内存分配的了解非常缺乏,我认为我忘记了一些事情.你能指点我吗?
ReallocMemory是一个功能.它返回新的指针值; 它不会修改它的论点.您想要调用ReallocMem,或者使用函数的结果:
ReallocMem(Node, SizeOf(Node^));
Run Code Online (Sandbox Code Playgroud)
要么
Node := ReallocMemory(Node, SizeOf(Node^));
Run Code Online (Sandbox Code Playgroud)
当这些函数中的任何一个无法就地调整内存块时,它会分配新内存,将旧内容复制到新缓冲区中,然后释放原始缓冲区.如果忽略ReallocMemory结果,则放弃新指针并在Node变量中保留旧的陈旧指针.继续使用过时的指针可以解释访问冲突和其他不可预测的行为.
这些函数有两个版本用于C++兼容性.C++没有Delphi的"编译魔术",它允许编译器拥有一个ReallocMem接受和修改任何指针类型的函数.
该ReallocMemory函数看起来像C++ realloc函数,但它们的行为方式并不完全相同,这就是为什么用函数的返回值直接覆盖输入变量是安全的.当重新分配失败时,该函数抛出一个异常,就像ReallocMem在那里realloc只返回一个空指针一样.
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |