很奇怪啊,字符串奇怪的改变???
对话框程序:
class CNet1Dlg : public CDialog
{
pubilc :
.........
int m_Key[16][6][8];
char key[8];
..........
}
构照函数{
.......
memset(key,0,strlen(key)) ;
memset(m_Key,0,strlen((const char *)m_Key)) ;
........
}
void CNet1Dlg::OnBtnKey()
{
int cx[8][7],dx[8][7] ;
.........
zhiHuan(cx,dx,17) ;//key已经取得字符串
for(int flag=1 ;flag<=16 ;flag++)
{
Ls(cx,flag) ;
Ls(dx,flag) ;
zhiHuan(cx,dx,flag) ;
}
}
void CNet1Dlg::zhiHuan(int cx[][7], int dx[][7], int flag)
{
int i=0 ,j=0 ;
int bite[8][8] ;
int table[8][7]={{57,49,41,33,25,17,9},
{1 ,58,50,42,34,26,18},{10,2,59,51,43,35,27},{19,11,3,60,52,44,36},
{63,55,47,39,31,23,15},{7,62,54,46,38,30,22},{14,6,61,53,45,37,29},
{21,13,5,28,20,12,4}} ;
int table1[8][6]={{14,17,11,24,1,5},{3,28,15,6,21,10},{23,19,12,4,26,8},
{16,7,27,2,13,2},{41,52,31,37,47,55},{30,40,51,45,33,48},{44,49,39,56,34,53},
{46,42,50,36,29,32}} ;
int bite1[8][7] ;
if(flag==1)
{
for( i=0 ;i<=7;i++)
{
for(j=0 ;j<=7;j++)
{
bite[i][j]=(key[i]&1<<(7-j))>>(7-j) ;
}
}
i=0 ;
j=0 ;
for(i=0 ;i<=7;i++)
{
for(j=0;j<=6;j++)
{
if(i<4)
cx[i][j]=bite[(table[i][j]-1)/7][(table[i][j]-1)%7] ;
else
dx[i][j]=bite[(table[i][j]-1)/7][(table[i][j]-1)%7] ;
}
}
}
else
{
for( i=0 ;i<=7;i++)
{
for(j=0 ;j<=6;j++)
{
if(i<4)
bite1[i][j]=cx[i][j] ;
else
bite1[i][j]=dx[i-4][j] ;
}
}
if(flag==17)
{
flag=flag%16 ;
for(i=0 ;i<=7 ;i++)
for(j=0 ;j<=5 ;j++)
{
m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7] ;
}
}
else
{
flag=flag-1 ; // 1
for(i=0 ;i<=7 ;i++)
for(j=0 ;j<=5 ;j++)
{
m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7] ; // 2
}
}
}
}
void CNet1Dlg::Ls(int cx[][7], int flag)
{
int table[16]={1,1,2,2,2 ,2,2,2,1,2 ,2,2,2,2,2,1} ;
if(table[flag]==1)
{
int i=cx[0][0] ,m=cx[0][1];
int x1=0 ,y1=0 ;
for(x1=0;x1<=3;x1++)
for(y1=0;y1<=6;y1++)
{
if(y1<6)
{
cx[x1][y1]=cx[x1][y1+1] ;
}
else if(x1==3&&y1==6)
{
cx[x1][y1]=i ;
}
else
{
cx[x1][y1]=cx[x1+1][0] ;
}
}
}
else if(table[flag]==2)
{
int i=cx[0][0] ,m=cx[0][1];
int x1=0 ,y1=0 ;
for(x1=0;x1<=3;x1++)
for(y1=0;y1<=6;y1++)
{
if(y1<5)
{
cx[x1][y1]=cx[x1][y1+2] ;
}
else if(x1==3&&y1==5)
{
cx[x1][y1]=i ;
}
else if(x1==3&&y1==6)
{
cx[x1][y1]=m ;
}
else
{
cx[x1][y1]=cx[x1+1][(y1+2)%7] ;
}
}
}
}
flag=flag-1 ; // 1 觉的算法问题加上的
m_Key[flag][i][j]=bite1[(table[i][j]-1)/7][(table[i][j]-1)%7] ; // 2 出现问题的地方
大家帮忙看看是怎么回是?
void CNet1Dlg::OnBtnKey() 中运行for(int flag=1 ;flag<=16 ;flag++)
当我没有加 1 时在falg<=0x0000e 时key中字符没有改变,
falg=ox0000f 进入zhiHuan(cx,dx,flag) ;后就改变了;
在zhiHuan(cx,dx,flag) ;中如果屏蔽掉 2就不会出现key中字符没有改变,
如果不屏蔽到falg=ox0000f 时从2所在的循环出来时就改变了???
这是我加 1之前出现的,加一是觉得算法有问题加的,没有其它??
加 1后还是出现问题???
请大家看看是什么原因引起的,,在
zhiHuan(cx,dx,flag) ;中怎么会引起字符改变了,但是就是在出了zhiHuan(cx,dx,flag) ;就改变了??
问题点数:20、回复次数:2Top
1 楼zhenbe(一头栽在C里面)回复于 2006-03-18 13:02:12 得分 20
把下面声明的地方换个地方试试,或者
class CNet1Dlg : public CDialog
{
pubilc :
.........
int m_Key[16][6][8];
char key[8];
..........
}
或者改成
class CNet1Dlg : public CDialog
{
pubilc :
.........
CString m_strNoUse1;
int m_Key[16][6][8];
CString m_strNoUse2;
char key[8];
CString m_strNoUse3;
..........
}
可能是vc的bug.
Top
2 楼yangxingkuan(开发者)回复于 2006-03-18 21:40:35 得分 0
真的很奇怪,用楼上的方法后,
这样后可以编译,却不能运行了,
断点运行却抱错:
Unhandled exception in net1.exe:0xc0000005:Acess Violation
就加了几个成员变量,就如此了,
Top




