定义一个结构,
  s= packed record
      a:integer;
      b:string;
      c:real;
      .
      .
      .
  end;
 结构的大小为90个字节
我要进行的操作是:把这个结构放到内存中去,然后对它进行读或者写,
 问题:1:怎么申请内存块?
       2:我读取或写其中的任意一个值,怎么定位?
       3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
       4:我在操作时候最应该注意那些问题?
       5:还有,我每次操作时,必须把另一个内存(就是上面提到的以16或32个字节为单位的那个块)中的有关这个完整的结构的数据都读出来,组合成一个完整的结构,然后对结构中的数据进行修改,在写入到另外的那个内块(就是上面提到的以16或32个字节为单位的那个块)中去,该怎样实现?
   再说一遍,分不够了,我再加!!!

解决方案 »

  1.   

    Ts= packed record
          a:integer;
          b:string[255]; //修改這行
          c:real;
          .
          .
          .
      end;
      PS = ^Ts;var s1: Ts; //已分配內存, 直接操作就可
        ps1: Ps;
    begin
       new(ps1);
       ps1^.a := 10;
      

  2.   

    结构的大小为90个字节
    我要进行的操作是:把这个结构放到内存中去,然后对它进行读或者写,
     问题:1:怎么申请内存块?
           New()       2:我读取或写其中的任意一个值,怎么定位?
           你结构不是定义了吗?Delphi会帮你干,不用你管ps1^.a := 10;就定位了。
           3:我要把结构按照每16个字节或32个字节来划分,放到另外一个内存块中(这个块是以16或32个字节为单位的)?
           那只能说你前面定义的90字节的结构不合理,否则你为什么要这么干?重新定义你的结构。            4:我在操作时候最应该注意那些问题?
           没有什么要注意的问题,这是最基本的操作。       5:还有,我每次操作时,必须把另一个内存(就是上面提到的以16或32个字节为单位的那个块)中的有关这个完整的结构的数据都读出来,组合成一个完整的结构,然后对结构中的数据进行修改,在写入到另外的那个内块(就是上面提到的以16或32个字节为单位的那个块)中去,该怎样实现?
          不知道你在说什么。    送你一句:简单就是美,不要把问题想得太复杂。
      

  3.   

    上面的问题已经有人回答了 我单就回答这两个问题吧4:我在操作时候最应该注意那些问题?   你一定要注意使用分配内存的函数后一定要在使用后释放他,如果不在局部也一定要在程序退出时释放,最好是使用TList记录你没释放的每一个指针
       
           5:还有,我每次操作时,必须把另一个内存(就是上面提到的以16或32个字节为单位的那个块)中的有关这个完整的结构的数据都读出来,组合成一个完整的结构,然后对结构中的数据进行修改,在写入到另外的那个内块(就是上面提到的以16或32个字节为单位的那个块)中去,该怎样实现?你可以使用Tlist对所有分配的内存的结构进行记录   这样然后在释放的时候对每个 TList中的指针进行释放就可以了.