Delphi 为什么我的程序在调用ReallocMemory后崩溃?
我正在尝试修改VirtualTreeView,以便在设计模式下查看树节点中的数据 分配节点内存是在私有静态方法中,所以我对此无能为力。我正在尝试重新分配内存以匹配新的大小 出于测试目的,我尝试重新分配相同数量的内存:Delphi 为什么我的程序在调用ReallocMemory后崩溃?,delphi,pointers,memory-management,delphi-7,virtualtreeview,Delphi,Pointers,Memory Management,Delphi 7,Virtualtreeview,我正在尝试修改VirtualTreeView,以便在设计模式下查看树节点中的数据 分配节点内存是在私有静态方法中,所以我对此无能为力。我正在尝试重新分配内存以匹配新的大小 出于测试目的,我尝试重新分配相同数量的内存: ReallocMemory(Node, sizeof(Node^)) 但是IDE在随机迭代中挂断,抛出大量AV。由于我对内存分配的知识非常缺乏,我想我忘记了一些东西。你能告诉我吗?ReallocMemory是一个函数。它返回新的指针值;它不修改其参数。您想调用ReallocMem
ReallocMemory(Node, sizeof(Node^))
但是IDE在随机迭代中挂断,抛出大量AV。由于我对内存分配的知识非常缺乏,我想我忘记了一些东西。你能告诉我吗?ReallocMemory是一个函数。它返回新的指针值;它不修改其参数。您想调用
ReallocMem
,或者使用函数的结果:
ReallocMem(Node, SizeOf(Node^));
或
当这些函数中的任何一个不能适当调整内存块大小时,它会分配新内存,将旧内容复制到新缓冲区,然后释放原始缓冲区。如果忽略ReallocMemory
结果,则丢弃了新指针,并在节点
变量中保留了陈旧的指针。继续使用陈旧指针可以解释访问冲突和其他不可预测的行为
<>这些函数有两种版本用于C++兼容。C++没有Delphi的“编译器魔术”,这是编译器允许有一个单一的<代码> RealLogMe< /Cuff>函数,它接受和修改任何指针类型。
<> > <代码> ReallocMemory <代码>函数看起来像C++ <代码> RealCalc>代码>函数,但它们的行为方式不完全相同,这就是为什么用函数返回值直接覆盖输入变量是安全的。当重新分配失败时,函数抛出异常,就像
ReallocMem
,其中asrealloc
只返回一个空指针。ReallocMemory
是一个函数。它返回新的指针值;它不修改其参数。您想调用ReallocMem
,或者使用函数的结果:
ReallocMem(Node, SizeOf(Node^));
或
当这些函数中的任何一个不能适当调整内存块大小时,它会分配新内存,将旧内容复制到新缓冲区,然后释放原始缓冲区。如果忽略ReallocMemory
结果,则丢弃了新指针,并在节点
变量中保留了陈旧的指针。继续使用陈旧指针可以解释访问冲突和其他不可预测的行为
<>这些函数有两种版本用于C++兼容。C++没有Delphi的“编译器魔术”,这是编译器允许有一个单一的<代码> RealLogMe< /Cuff>函数,它接受和修改任何指针类型。
<> > <代码> ReallocMemory <代码>函数看起来像C++ <代码> RealCalc>代码>函数,但它们的行为方式不完全相同,这就是为什么用函数返回值直接覆盖输入变量是安全的。当重新分配失败时,函数抛出异常,就像
ReallocMem
,其中asrealloc
只返回一个空指针。IIRC,Delphi 7中的函数是ReallocMem
。显示周围的代码-如何使用节点
,问题可能就在那里。您没有分配ReallocMemory的返回值。但很可能你需要做的不止这些。如果没有code.IIRC,就不可能知道,Delphi 7中的函数是ReallocMem
。显示周围的代码-如何使用节点
,问题可能就在那里。您没有分配ReallocMemory的返回值。但很可能你需要做的不止这些。没有代码就不可能知道。