还有一个问题:
我开了100个空间,结果只用了一部分,然后调用FreeExtra()
但是不管我用GetSize()还是GetUpperBound(),结果都是100.这是什么原因,怎么样才能得到真实的数据个数呢?

解决方案 »

  1.   

    看MSDN!
    1、CObArray::GetUpperBound
    Returns the current upper bound of this array. Because array indexes are zero-based, this function returns a value 1 less than GetSize
    2、差1
    3、Add是在最后一个数据后加新数据,SetAt实在已有数据的地方换一个数据
    4、自己试吧。
    5、我没出现过你这样的情况,我想应该是调用SetSize时CStringArray类将空的地方都设成了空字符串,你可以显示一下后面的数据,看是不是这样。检测不难,当读到空字符串时自然就结束了。
      

  2.   

    使用setsize,主要是为了避免频繁的内存操作(因为carray是使用的数组,而不是list,因此,添加数据的时候,会引起内存重新分配。如果使用setsize+setat,基本上可以避免这个问题。
      

  3.   

    如果这个动态数组不是经常需要改变的话,没有必要SetSize(),只需要Add()就可以了,然后你就可以用GetSize()了,否则的话,自己维护数组大小吧。