我想开辟一个缓冲区然后用指针指向它。请大家多帮忙啊!
解决方案 »
- 【泰坦散分贴】明天准备回家,今天预祝大家清明节快乐!
- 请问这条SQL 语句有错误吗? 为什么刚开始录入 '佳宝' 什么也查询不到,可录入 '夏利' 查询出来之后,再录入 '佳宝' 也能查询出来,不解 !!!
- 一个delphi写的程序.里面有一些数据库文件 如何才能知道是什么数据库格式的?
- 求delphi7下载地址~
- 夏天火气大,散点分!呵呵
- ★★屏幕取词源代码(for delphi)★★快去下载啦!
- 请高手看看,下面这段代码有没有内存泄漏?
- 怎样获知系统是否有打印机?
- 为什么在Sql Server老是新建不上新的Sql Server服务器呢?
- 大家快来看看呀!一个不是问题的问题?无解呀!!!
- ◆◆我编的进销存源码◆◆◆
- 我想动态生成一个SHAPE,并且能够响应ONMouseDown的事件(我已经动态生成一个SHAPE,但不知道怎么编写响应MouseDown?)
FreeMem() //释放
Heapfree
new
dispose
Size: Integer;
Buffer: PChar;
begin
AssignFile(F, 'test.txt');
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size);
try
BlockRead(F, Buffer^, Size);
ProcessFile(Buffer, Size);
finally
FreeMem(Buffer);
end;
finally
CloseFile(F);
end;end;
01H ..... ............. ....
….
FFH ..... ............ .....
就开辟一个象这个表一样的缓冲区。就是每一行是一个内存地址的内容。有多少行就有多少个地址。
Buffer: PChar;
begin
Buffer:=AllocMem(大小);
...........
FreeMem(Buffer);
end ;
可以把Buffer定义成链表,每行数据定义成每个链表单元中的数据。
AllocMem FreeMem
Getmem FreeMem ()
new Dispose (分配指针)
setlength (常用在分配动态数组长度)
其实我是打算用SPCOMM控件来接收缓冲区的内容。
OnReceiveData :procedure(Sender: TObject;Buffer: Pointer;BufferLength: Word) of object你们哪个做过串口RS-232方面的程序。也就是对通信产品做软件处理。有的请与我E-MAIL联系。我把分全给。不够,在加!
E-MAIL:[email protected]
分配内存也一次分配 N* SIZEOF(YOURLINKLIST)...
int *ptr, *ptr2;
int i;
ptr = (int*) malloc(sizeof(int) * 20);
ptr2 = ptr;
for (i=0; i<20; i++){
*ptr = i;
ptr++;
}
free(ptr2);
Object Pascal中,动态分配内存的函数是GetMem(),与之对应的释放函数为FreeMem()(传统Pascal中获取内存的函数是New()和 Dispose(),但New()只能获得对象的单个实体的内存大小,无法取得连续的存放多个对象的内存块)。因此,与上面那段C的代码等价的 Object Pascal的代码为:
var ptr, ptr2 : ^integer;
i : integer;
begin
GetMem(ptr, sizeof(integer) * 20);
//这句等价于C的 ptr = (int*) malloc(sizeof(int) * 20);
ptr2 := ptr; //保留原始指针位置
for i := 0 to 19 do
begin
ptr^ := i;
Inc(ptr);
end;
FreeMem(ptr2);
end;
对于以上这个例子(无论是C版本的,还是Object Pascal版本的),都要注意一个问题,就是分配内存的单位是字节(BYTE),因此在使用GetMem时,其第二个参数如果想当然的写成 20,那么就会出问题了(内存访问越界)。因为GetMem(ptr, 20);实际只分配了20个字节的内存空间,而一个整形的大小是四个字节,那么访问第五个之后的所有元素都是非法的了(对于malloc()的参数同 样)。
FreeMem() //释放