有这样一个结构体
struct Test{
  int i;
  CString str;
};我做了一个dll文件,其中的一个函数是:
void set(Test *t)
{
 t->i = 9;
 t->str = "ttt"; //此处出错
}在调用此dll的程序中:
Test *t = new Test;
set(t); 
delete t;在debug版本中没有问题,在release版本中就出错,这是为什么呢?
郁闷

解决方案 »

  1.   

    struct也能用CString?
    那sizeof(Test)会返回什么? 谁知道?
      

  2.   

    sizeof(Test) = 8;
    sizeof(CString) = 4;
    sizeof(int) = 4;当这个dll是debug版本的时候,我调用这个函数不会出任何问题,
    本想编程release版本发布,谁知道就出现了问题。
    怎么解决啊,高人请回一下吧。
      

  3.   

    请使用字符串代替。
    struct Test{
      int i;
      char szData[1];
    };
    结构体中最好不要使用CString对象。
      

  4.   

    这个结构体和接口是定义好的,我只负责实现。
    我也想用char数组,不过不行:(
      

  5.   

    我试了一下,
    如果dll是debug版本的,那么调用程序debug版本能够通过。
    如果dll是release版本的,那么调用程序debug版本时不会通过,但调用程序也是release版本的话就能通过。
      

  6.   

    我想大概是因为当你执行Test *t = new Test;时,没有给str分配足够的空间,当你在dll中给它负值时,就有可能使用了你所分配的内存空间以外的空间,如果你能给设计结构的人提意见的话,建议不要用CString 和 int 这样的类型定义结构中的变量,因为这两个类型在不同环境下,所占空间大小是不确定的,很容易出现内存泄漏,已经使用了不安全内存的问题。
    设计人员把结构设计成这样,未免也太水了点儿。