我想开辟一个缓冲区然后用指针指向它。请大家多帮忙啊!

解决方案 »

  1.   

    GetMem()  //开辟缓冲区
    FreeMem() //释放
      

  2.   

    Heapalloc
    Heapfree
    new
    dispose
      

  3.   

    var  F: file;
      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;
      

  4.   

    00H(代表地址) Length MessagePacket CheckSun
      01H ..... .............        .... 
       ….
      FFH ..... ............         .....
    就开辟一个象这个表一样的缓冲区。就是每一行是一个内存地址的内容。有多少行就有多少个地址。
      

  5.   

    var
      Buffer: PChar;
    begin
    Buffer:=AllocMem(大小);
    ...........
    FreeMem(Buffer);
    end ;
    可以把Buffer定义成链表,每行数据定义成每个链表单元中的数据。
      

  6.   

    很多
    AllocMem  FreeMem
    Getmem    FreeMem ()
    new       Dispose (分配指针)
    setlength         (常用在分配动态数组长度)
      

  7.   

    完了,C这块学得太差了。找个时候把链表这块看看了在来看看吧。
    其实我是打算用SPCOMM控件来接收缓冲区的内容。
    OnReceiveData :procedure(Sender: TObject;Buffer: Pointer;BufferLength: Word) of object你们哪个做过串口RS-232方面的程序。也就是对通信产品做软件处理。有的请与我E-MAIL联系。我把分全给。不够,在加!
    E-MAIL:[email protected]
      

  8.   

    可以把Buffer定义成链表,每行数据定义成每个链表单元中的数据。不是BUFFER定义为链表 而是你写入,取出的时候是以链表的方式进行的。
    分配内存也一次分配 N* SIZEOF(YOURLINKLIST)...
      

  9.   

    jinjazz(近身剪(N-P攻略)) \ beyondtkl(大龙驹<弱水三K, 我取1bit>)\ ultima_thule(ultima_thule) 你们做过串口方面的软件吗?最好是SPCOMM控件。呵呵,有的话,请与我联系,先谢了。QQ:93428219  Email:[email protected]
      

  10.   

    动态内存分配。C中,使用malloc()库函数分配内存,free()函数释放内存。如这样的代码:
            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()的参数同 样)。
      

  11.   

    GetMem()  //开辟缓冲区
    FreeMem() //释放