小弟用SetLength为一个字符串变量分配空间,SetLength(str,200000);因为分配的空间比较大,用完后,用SetLength(str,0)将变量所占的空间释放掉,但这样频繁的循环操作,经过一段时间,内存溢出,请问各位大侠,用完变量后,怎样才能立即的将变量所占的空间释放掉呢?

解决方案 »

  1.   

    释放是用free。再说一个string变量不用分配内存,也不用自己释放啊。
      

  2.   

    str.free就可以适释放掉了
    setlength是分配的,又不是释放
      

  3.   

    字符串不用释放.再说也没有free这个方法.对象就用free了..
      

  4.   

    string 为生存期自管理类型,自动释放。
      

  5.   

    给str分配空间,是因为要使用的函数,必须在使用之前给它分配一个较大的空间,
    因为调用该函数的频繁很高,而且每次使用前都得重新分配,所以用完后得把它释放掉....
    我用的是SetLength(str,0);
    但这样做看起来效果不是很明显...
      

  6.   

    string 为生存期自管理类型,自己会释放啊
      

  7.   

    -_-# str.free; 这样也行,楼上几个牛人真弓虽string内存是Delphi自己管理的,你不用担心这块,倒是写代码时要注意以下几个问题:
    1.string变量可看成一个指针,指向String内容(如'ABC')所在的内存块。
    2.Delphi对这个内存块采用的是引用计数管理,这个引用计数的位置在'ABC'首内存地址-1的地方。
    3.明白上面两点后,就可知,如果你的str是function内变量,出了function范围,相关字符串的引用计数自然就-1。
    4.如果用string做为函数参数,并且不需要改变它的话,推荐使用Const修饰符。
    5.如果你用SetLength去分配String的内存,用SetLength(str,0)就没错, str := '';也可以。如果没有回收那估计是某个地方你用了strTemp := str;这样的语句让那块内存的引用计数+1了。
      

  8.   

    不需要自己释放,setlength直接用就行了,谁告诉你内存溢出了,不可能的事情。
      

  9.   

    N个人都说了string不用释放,而且根本没有free这个方法,对象才有。