循环运行完这句之后SetLength(sRet, pData.iDataLen - (SHEAD_LEN + 1) + 2);内存溢出了
这是怎么回事啊?用setlength的不用释放的吧?可是我就溢出了呢,怎么办呢?

解决方案 »

  1.   

    SetLength()用来分配动态数组类型的空间,本质上和new(XXX)和XXX:=TXXX.create一样,因此用完后也需要手工释放。释放也用SetLength,只不过后面的长度参数要设成0。
      

  2.   

    我断点运行了,sret是string型的变量,前面都不会出错,到上面那两句就出问题了,我也按一楼那位说的setlength(sret,0)了,可是不知道怎么了还是不行,,,,string型的不是也可以用setlength来设置长度的吗?
      

  3.   

    string类型是可以那样用,不过建议还是用array of char,如果用setlength的话string的类型相当于ShortString最多只能存储256个字符,如果超过这个数可能就要报错了,动态数组用完要释放的。