最近在别人代码上进行一些维护,发现将STLPORT引进来后,有些用到CArray中存放了string类型的结构会有异常,最后跟踪锁定到CArray的问题,发现CArray用到STLPORT的string类型的时候,增加空间,拷贝有问题,string的finish指针没有变化,导致string数据错误;大家有这么用过么?

解决方案 »

  1.   

    虽然将CArray改成vector或者将string改成CString可以解决此问题,不过难道微软的CArray就不兼容STLPORT的string么?
      

  2.   

    要想CArray兼容STLPORT的string,倒不如要 STLPORT的string兼容CArray。不过可以发信问问Gates
      

  3.   

    不应该存在问题的吧?
    CArray和vector都相当成熟的CArray也没有对元素对象有什么特殊要求
    如果有问题,先跟踪一下,看看是什么错误
      

  4.   

    刚测试过
    无论是SetSize,还是赋值,都没有问题估计还是你代码的问题
      

  5.   

    我自己随便写了个Test程序,也会出现啊struct TestClass
    {
        int i;
        string str;
    }CArray<TestClass, TestClass&> array;你定义多个,我自己是5个,然后先不setsize,直接add进CArray,最后写一个循环,读下CArray里面的数据,将TestClass里面的string拷贝出来;或者调试看下内部string结构,就会出现了!
      

  6.   

    后来发现是debug调试的时候会出现,但是直接运行就OK
      

  7.   

    环境:VC6 + STLPORT 5.1.4 struct Test
    {
    int i;
    string str;
    };CArray<Test, Test&> array; for (UINT n = 0; n < 10; n++)
    {
    Test t1;
    t1.i = n;
    t1.str = "0000000";
    array.Add(t1);
    } for(n = 0; n < 10; n++)
    {
    Test& t1 = array[n]; string str = t1.str;
    } CArray<Test, Test&> array2;

    array2.SetSize(10);
    for (n = 0; n < 10; n++)
    {
    Test t1;
    t1.i = n;
    t1.str = "0000000";
    array2.SetAt(n, t1);
    }