在我的一个程序中,有一个CString 实例,当我给它赋值时,总是崩溃,出现访问违规错误.但我把代码单独拉出来测,没一点事,让我很郁闷.不知何故?
代码类似下面:
int fun(LPCTSTR str)

     CString strA = str;
    CString strTemp;
    strTemp = "test";    //这一句崩了.奇怪.我觉的好像是分配内存失败,但
                       //不应该啊,它是栈分配啊
    ...................
  ...........
}

解决方案 »

  1.   

    不会吧?将其改为strTemp.Format("Test");试试
      

  2.   

    问题可能是这一句:
    CString strA = str;
    为什么要用LPCTSTR,这是unicode, 换成LPCSTR试一试
      

  3.   

    应该是, CString strTemp= "test";   
    CString是类,strTemp是对象。
    其实赋值是调用构造函数(劝你还是复习一下构造函数吧:) 老兄。)。
    CString strTemp= "test";   //等价于CString strTemp= CString("test"); 这么深奥的问题,别忘了给分:)
      

  4.   

    赋值并不等于调用构造函数。因为CString重载了运算符=,所以
    CString strTemp;
    strTemp = "test";这句是没错的,并且调用的是const CString& operator =(...);
    如果是这样CString strTemp= "test";那么就会调用CString的拷贝构造函数原来这个函数:
    int fun(LPCTSTR str)

         CString strA = str; //在这里调用了CString的拷贝构造函数
        CString strTemp;
    }LPCTSTR类型的拷贝构造函数的原型是这样的CString( LPCTSTR lpch, int nLength );
    改为这样试试:
    int fun(LPCTSTR str)

         CString strA(str);
        CString strTemp;
        strTemp = "test";    //这一句崩了.奇怪.我觉的好像是分配内存失败,但
                           //不应该啊,它是栈分配啊
        ...................
      ...........
    }
    说真的在我的机器上没有问题!Visual C++.Net
      

  5.   

    我相信我的程序没错,但很奇怪,它在那个程序中竟然崩了,而我把代码单独拉出来测,没一点问题,而且在DEBUG版本下,没问题,此问题只在RELEASE版中存在(我把编译选项调的几乎和DEBUG的选项快一样了),我也精确定位到
    strTemp = "test";这一句了,所以很奇怪,它会访问违规
      

  6.   

    我觉得没有错误啊。
    应该是对的。怎么会有这种错误呢。
    试试guoxiny(狼) 大哥的方法,我觉得很有道理。
    不过,你的代码在我的机器上也没有问题。
      

  7.   

    这种情况一般是由于内存分配的问题,即你的程序里堆栈已经乱了。
    我以前遇到的其中一次是由于我的LIB库里的某个结构和我在外边声明的结构大小不一致造成的,你不妨找一找。
      

  8.   

    我也碰到过在Debug状态下正常,在Release版本中崩了得问题,是由于内存分配导致的,有没有好的方法可以尽量减少这方面的问题呢?大家可以发表高论!
      

  9.   

    我也碰到过这种问题,关注。Debug和Release的问题,而且是由于一句
    CStringList m_List1,m_List2;
      

  10.   

    Debug和Release中不一样很正常,因为这只是一个断言错误?我怀疑问题并不在你的这个函数中,你应该重点察看之前分配的数组大小是否够用,很有可能是之前的数组溢出在此出造成的。
      

  11.   

    谁说赋值就是调用构造函数?不懂就不要在这里误人子弟,赋值是调用operator=(),和构造函数完全两回事情。
    至于访问违例,问题肯定是出在其他地方,一般都是其他地方有内存益出了。
      

  12.   

    清一下work目录和那几个该死的文件,铁好!!
      

  13.   

    同意: eggaig(雷打不动) 
    把那些文件全删了,然后Rebulid All
    说真的,觉得应该没什么问题
      

  14.   

    我也遇到同样问题,死找找不出原因,关注!!!我在主程序中声明一个结构,内有数个CString成员,然后传指针给DLL供其使用。
    DLL内对CString赋值,有些成员成功,有些就不能!我在主程序内给CString赋上“默认值”字符串,则DLL内就可以用Format赋值,原因不详!现在我的解决方法总让自己不安,召唤高人解答!!!