一变量在release版本与debug版本的不同

Iswanderer 2004-08-30 04:07:45
我在一函数内定义了一个局部变量,在release版本和debug版本下显示的值不同。
请高手指点!!!
...全文
104 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Iswanderer 2004-08-31
  • 打赏
  • 举报
回复
问题解决。非常感谢whale!!!发现要学的东西真的好多!
不过是要将strcpy(&inchar,strInput.Mid (nPos,1));
换成。inchar = strInput.GetAt(nPos);
auly403 2004-08-31
  • 打赏
  • 举报
回复
空指针!
http://community.csdn.net/Expert/topic/3219/3219449.xml?temp=.6365167
whale 2004-08-31
  • 打赏
  • 举报
回复
初步看了一下发现strcpy(&inchar,strInput.Mid (nPos,1));这句话有问题。你的inchar只是一个char,而strcpy拷贝的时候会在最后加上一个'\x0'表示字符串结束,这样肯定及时你的strInput.Mid (nPos,1)只是一个字符,也会因为越界而修改了别的变量的值。
直接用 inchar = strInput[nPos]
yds 2004-08-31
  • 打赏
  • 举报
回复
应该是又指针或数组变量没有初始化或越界,直接冲掉了nNum的值。你仔细检查一下指针和数组吧!
Iswanderer 2004-08-31
  • 打赏
  • 举报
回复
CString CTelBookDlg::MakeInputTelData(CString strInput)
{

long int nTelLength,nPos,nNum,nPosTmp;
char inchar,inchar1;
char *pOutput,*pOutputTmp;
CString strOutput;
BOOL bExistFlag[]={0,0,0,0,0,0,0,0,0,0,0,0};

char s[12];
s[0]=0x10; s[5]=0x15; s[10]=0x1A;
s[1]=0x11; s[6]=0x16; s[11]=0x1B;
s[2]=0x12; s[7]=0x17;
s[3]=0x13; s[8]=0x18;
s[4]=0x14; s[9]=0x19;

int i;

nTelLength=strInput.GetLength ();

pOutput=(char *)malloc(nTelLength);
if(pOutput==NULL)
AfxMessageBox("No Sufficient Memory");
pOutputTmp=pOutput;
nNum=0;
for(nPos=0;nPos<nTelLength;nPos++)
{
strcpy(&inchar,strInput.Mid (nPos,1));
switch(inchar)
{//
case '':
break;
case 0x00:
break;
case 0x08:
nPos+=10;
break;
case 0x10:
for(i=0;i<12;i++) bExistFlag[i]=0;
nPos+=4;
*pOutputTmp=inchar;
pOutputTmp++;
nNum++;
bExistFlag[0]=1;
break ;
default :
if(inchar>=0x11 && inchar<= 0x1B)
{
//去除末尾的空格符
nPosTmp=nPos;
do
{
nPos--;
pOutputTmp--;
nNum--;
strcpy(&inchar1,strInput.Mid (nPos,1));
}
while(inchar1==0x20);

pOutputTmp++;
nNum++;
nPos=nPosTmp+4;

//加入格式符号
i=inchar%0x10;
bExistFlag[i]=1;
do
{
i--;
}while(bExistFlag[i]==0);
i++;
while(bExistFlag[i]==0)
{
bExistFlag[i]=1;
//*pOutputTmp=s[i];
//pOutputTmp++;
nNum++;
i++;
}
}//if
*pOutputTmp=inchar;
pOutputTmp++;
nNum++;
break;
}//switch
}//for
strOutput=pOutput;
//CString lengthm;
//lengthm.Format("%d",nNum);
//AfxMessageBox(lengthm);
strOutput=strOutput.Mid (0,nNum);//nNum的值在debug与release下不同。
free(pOutput);
return strOutput;
}
large_small 2004-08-30
  • 打赏
  • 举报
回复
这就有点奇怪哟
superhandsome 2004-08-30
  • 打赏
  • 举报
回复
..贴出来看看~~
DentistryDoctor 2004-08-30
  • 打赏
  • 举报
回复
如果初始化了,那就是你的值付得不一样。
Iswanderer 2004-08-30
  • 打赏
  • 举报
回复
初始化了,结果还是一样的。
名牌大灰狼 2004-08-30
  • 打赏
  • 举报
回复
你有没初始变量.把你的变量都初始化了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧