Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 为什么我的程序在调用ReallocMemory后崩溃?_Delphi_Pointers_Memory Management_Delphi 7_Virtualtreeview - Fatal编程技术网

Delphi 为什么我的程序在调用ReallocMemory后崩溃?

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

我正在尝试修改VirtualTreeView,以便在设计模式下查看树节点中的数据

分配节点内存是在私有静态方法中,所以我对此无能为力。我正在尝试重新分配内存以匹配新的大小

出于测试目的,我尝试重新分配相同数量的内存:

ReallocMemory(Node, sizeof(Node^))

但是IDE在随机迭代中挂断,抛出大量AV。由于我对内存分配的知识非常缺乏,我想我忘记了一些东西。你能告诉我吗?

ReallocMemory是一个函数。它返回新的指针值;它不修改其参数。您想调用
ReallocMem
,或者使用函数的结果:

ReallocMem(Node, SizeOf(Node^));

当这些函数中的任何一个不能适当调整内存块大小时,它会分配新内存,将旧内容复制到新缓冲区,然后释放原始缓冲区。如果忽略
ReallocMemory
结果,则丢弃了新指针,并在
节点
变量中保留了陈旧的指针。继续使用陈旧指针可以解释访问冲突和其他不可预测的行为


<>这些函数有两种版本用于C++兼容。C++没有Delphi的“编译器魔术”,这是编译器允许有一个单一的<代码> RealLogMe< /Cuff>函数,它接受和修改任何指针类型。
<> > <代码> ReallocMemory <代码>函数看起来像C++ <代码> RealCalc>代码>函数,但它们的行为方式不完全相同,这就是为什么用函数返回值直接覆盖输入变量是安全的。当重新分配失败时,函数抛出异常,就像
ReallocMem
,其中as
realloc
只返回一个空指针。

ReallocMemory
是一个函数。它返回新的指针值;它不修改其参数。您想调用
ReallocMem
,或者使用函数的结果:

ReallocMem(Node, SizeOf(Node^));

当这些函数中的任何一个不能适当调整内存块大小时,它会分配新内存,将旧内容复制到新缓冲区,然后释放原始缓冲区。如果忽略
ReallocMemory
结果,则丢弃了新指针,并在
节点
变量中保留了陈旧的指针。继续使用陈旧指针可以解释访问冲突和其他不可预测的行为


<>这些函数有两种版本用于C++兼容。C++没有Delphi的“编译器魔术”,这是编译器允许有一个单一的<代码> RealLogMe< /Cuff>函数,它接受和修改任何指针类型。
<> > <代码> ReallocMemory <代码>函数看起来像C++ <代码> RealCalc>代码>函数,但它们的行为方式不完全相同,这就是为什么用函数返回值直接覆盖输入变量是安全的。当重新分配失败时,函数抛出异常,就像
ReallocMem
,其中as
realloc
只返回一个空指针。

IIRC,Delphi 7中的函数是
ReallocMem
。显示周围的代码-如何使用
节点
,问题可能就在那里。您没有分配ReallocMemory的返回值。但很可能你需要做的不止这些。如果没有code.IIRC,就不可能知道,Delphi 7中的函数是
ReallocMem
。显示周围的代码-如何使用
节点
,问题可能就在那里。您没有分配ReallocMemory的返回值。但很可能你需要做的不止这些。没有代码就不可能知道。