调用copymemory()函数时,若传递的第二个参数是string类型,应该怎么办?
type
  Tmy_data=record
    buf:array of char;
end;
buf_list:array of Tmy_data;
Data:string;
copymemory(buf_list[StringGrid1.RowCount-2].buf ,Data,DataLen);
我将Data变量强制转换成Pchar(Data)类型的后,就出提示出错:
project cap.exe raised exception class EAcess violation with message'acess violation at adress 00408840 in module 'cap.exe'
这个问题该如何解决,希望高手给予帮助,谢谢!

解决方案 »

  1.   

    pchar(Data)与@Data[1]都可以,,
    你的错误可能以下原因引起是:
    1.StringGrid1.RowCount-2可能小于0,动态数组buf_list:array   of   Tmy_data;下标是从0开始
    2.buf_list在使用前需要SetLength()设置长度;
    3.buf_list[StringGrid1.RowCount-2].buf 也是一个动态数组,最好SetLength(buf_list[StringGrid1.RowCount-2].buf ,DataLen);用完后,可通过SetLength(buf_list[StringGrid1.RowCount-2].buf ,0)释放
      

  2.   

    neweipeng:
    你好,pchar(Data)与@Data[1]我都用过,可还是提示一样的错误啊,不定我没用SetLength(buf_list[StringGrid1.RowCount-2].buf   ,0)释放,是不是和这个有关?
    这句话用在什么地方,还望赐教!
      

  3.   

    非常感谢大家的回复,尤其是neweipeng! 
    此问题已经解决了,原因是我只给Buf_list二维数组的第二维分配大小,没有给第一维分配大小,呵呵,才学习编程,很多东西都不懂,还望大家以后多多帮忙!我没有分,也不能给你们加分了,不好意思啊