为何在DEBUG下运行正常,在RELEASE下出错?该如何处理

为何在DEBUG下运行正常,在RELEASE下出错?
我在DLL工程中有一个类的一个函数用于返回一char   *
char   *   dllClass::Fun()
{
    ..
    return   pCh;
}

char   buffer[_PASNUM];
我的一个DLL工程中有一个API函数

long   GetString(LPTSTR   &lpBuffer)  
{
      strcpy(lpBuffer,dllClass.Fun();     //此句在DEBUG下正常
    //在RELEASE下运行到此就出错,为什么,
//我把它改为lpBuffer   =   dllClass.Fun();就不出错了,但EXE退出时,还报一次错
//怎么回事???

}

------解决方案--------------------
有时数组越界访问会出现这种情况
------解决方案--------------------
1. 先说你的第一个函数: 
char * dllClass::Fun()
{
..
return pCh;
}
这个函数返回的是指针,因此非常危险:依你的代码看,return 的 pCh 应该是在这个函数中定义的局部变量,因此这个返回是不确定的值,在出了这个函数体后,该局部变量 pCH 所指向的内容就不确定了! 因此你的这个 Fun函数是不正确的! 解决的办法可以是改成是传引用或指针(个人推荐 :引用比较方便) 
关于这个说明请详细参考:<高质量C++编程指南> Ch7 ,示例7-4-4~!

2. 清楚这一点后,就能断定在调用
strcpy(lpBuffer,dllClass.Fun();
lpBuffer = dllClass.Fun(); 无论是哪句代码你给它拷贝的内容就是不确定的(因为Fun函数返回的地址的内容已经不是确定了),因此会报错!@ 

3.至于在 debug 下面,release 下面出错现象不同就不难理解了,
说到底, 还是内存的问题!