Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
来源:互联网 发布:夭寿啦网络上什么意思 编辑:程序博客网 时间:2024/04/28 22:29
请看下面的代码:
program TestRecord;
{$APPTYPE CONSOLE}
uses
SysUtils,
Math;
type
TRecordA = record
Name: string;
end;
procedure RunTestRecord;
var
R1, R2: TRecordA;
begin
R1.Name := StringOfChar('A', RandomRange(64, 256) * 1024);
Move(R1, R2, SizeOf(R1));
end;
var
I: Integer;
begin
try
for I := 0 to 100000 - 1 do
RunTestRecord;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
由于结构中有String类型,红色部分进行了复制操作,结果复制后R2和R1中的Name指向同一块内存,导致释放出现错误,最后堆栈溢出。
因此在遇到结构复制时一定要使用=进行复制,千万不要使用内存操作函数。
最容易犯错误的时候就是复制结构数组,为了方便可能就直接内存拷贝,结果就会引发错误!
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- Delphi 的内存操作函数:复制内存
- Delphi结构中使用String时遇到的内存泄露问题
- Delphi 的内存操作函数(5): 复制内存
- delphi中move函数的用法
- delphi中move函数的正确理解
- delphi中move函数的用法
- delphi中move函数的用法
- Delphi-string转pbyte的方法——Move函数!
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- delphi 里move函数的用法
- 关于delphi Move函数的用法详解
- 小车的移动集成在一个Move函数中(带有三个参数)
- 【Delphi】string内存结构
- delphi 的内存复制处理
- delphi中记录数组的使用练习
- delphi 复制文件夹的函数
- Android X86模拟器的使用配置方法
- o.boj 1436 门牌号
- C++编程经验-返回局部变量的讨论
- JPEG2000支持网络图像显示策略由朦胧到清晰
- 用phpmailer发送HTML邮件
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- 交流采样论文(转)
- o.boj 1437 Mr.Fang的播放器
- 编译linux内核,提示找不到nvurses库的解决办法
- 如何得到项目的地址,如:http://localhost:8080/HR
- php流程控制的代替语法——在控制语句中用冒号(:)
- o.boj 1438 服装节
- 黑马程序员_第一天_学会用IO流读写方式拷贝文本文件
- 我的工资谁做主?