user-0 提问: 求各路大牛帮我看看为什么会出现debug error

回复:
user: user-1
content: 引用 14 楼 wuxiaodi250 的回复:[quote=引用 13 楼 u011779875 的回复:] [quote=引用 12 楼 wuxiaodi250 的回复:] [quote=引用 9 楼 wangdahu888 的回复:] [quote=引用 3 楼 wuxiaodi250 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的 [/quote] vs2010不会报这错误[/quote] ……那是怎么回事啊？VS2010编译是正确的？[/quote]  你注释掉 int main()  {        Cecb();     // Decb();         return 0;  } int main()  {       // Cecb();     // Decb();         return 0;  } 你在测试下能通过吗 如果依然出现刚才的错误  拷贝代码  重新建立个工程 重新编译[/quote] 我都进行过调试了……也重新建立了工程……还是有错……[/quote] 我的意思是说 你注释掉 int main()  {       // Cecb();     // Decb();         return 0;  }  之后你运行了吗 还是报错吗 如果这种事情发生 说明扔掉你那个破VC 如果不报错 那么继续注释掉 int main()  {       Cecb();     // Decb();         return 0;  } 如果不报错 仔细看Decb 既然调试不好使 那就只能手动了 如果在不好使 就应该是你那些打开的文件哪地方有问题 继续检查  如果还是不行 爱莫能助 了真是  天亡你啊

user: user-0
content: 引用 13 楼 u011779875 的回复:[quote=引用 12 楼 wuxiaodi250 的回复:] [quote=引用 9 楼 wangdahu888 的回复:] [quote=引用 3 楼 wuxiaodi250 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的 [/quote] vs2010不会报这错误[/quote] ……那是怎么回事啊？VS2010编译是正确的？[/quote]  你注释掉 int main()  {        Cecb();     // Decb();         return 0;  } int main()  {       // Cecb();     // Decb();         return 0;  } 你在测试下能通过吗 如果依然出现刚才的错误  拷贝代码  重新建立个工程 重新编译[/quote] 我都进行过调试了……也重新建立了工程……还是有错……

user: user-1
content: 引用 12 楼 wuxiaodi250 的回复:[quote=引用 9 楼 wangdahu888 的回复:] [quote=引用 3 楼 wuxiaodi250 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的 [/quote] vs2010不会报这错误[/quote] ……那是怎么回事啊？VS2010编译是正确的？[/quote]  你注释掉 int main()  {        Cecb();     // Decb();         return 0;  } int main()  {       // Cecb();     // Decb();         return 0;  } 你在测试下能通过吗 如果依然出现刚才的错误  拷贝代码  重新建立个工程 重新编译

user: user-0
content: 引用 9 楼 wangdahu888 的回复:[quote=引用 3 楼 wuxiaodi250 的回复:] [quote=引用 2 楼 wangdahu888 的回复:] FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的 [/quote] vs2010不会报这错误[/quote] ……那是怎么回事啊？VS2010编译是正确的？

user: user-1
content: 问题说明：  主模块在调用Dll的导出函数时会保存返回地址在堆栈中（ESP+xxx）。函数调用返回时，会弹栈取得返回地址（ESP-xxx），从而返回到主模块。   vaule of ESP was not properly saved across a function call.   上面出现的错误是系统提示主模块调用前堆栈的指针（ESP），与调用导出函数后的指针不符。   一般有两种情况会出现类似错误。  1. Dll导出函数声明导出方法，与主模块中声明的导入方法不一致。使得调用时参数的传递中，破坏了调用堆栈，出现错误。   2. Dll导出函数本身破坏了调用堆栈。编码中最一般的错误比如：对象（如CString）等。   解决方法：  针对第1种情况，请确定导出方（Dll等）与导入方（Exe等）的声明保持一致。  对于第2种情况，请保证产生的对象都被安全的释放。   备注：  可以试试下面的方法可以简单的测试方法  将Dll的导出函数定义成空处理（直接返回），如还出现错误，则是调用错误。

user: user-0
content: 引用 8 楼 u011779875 的回复:[quote=引用 7 楼 wuxiaodi250 的回复:] [quote=引用 6 楼 u011779875 的回复:] [quote=引用 4 楼 wuxiaodi250 的回复:] 各位大神们都来帮看啊！！！本菜鸟感激不尽啊！！！ 你用的什么编译器 怎么还用这种写法 for(int i = 0 ; i < 9; i++) 这是什么标准了啊 你不是用的C++编译器写的C吧  第二 这种情况最简单的方式 是先注释掉 第二个函数 看是否报错 排除 第二个 调试第一个  在检查是否是环境所造成的  你这个不像是逻辑错误 应该是环境有问题  仅供参考[/quote]  我用的是VC6.0…… 我已经调试过了，过程中没有错误，到最后一步就会跳出刚刚的那个框……[/quote] 不要用VC6.0来写C语言 VC6.0就是个bug  那个东西我看着就头疼 什么VC 垃圾 你要是写C 你就用别的 不要用C++来试图写C  除非你C已经很厉害了 且懂得俩个编译器的区别  我用别的gcc 编译器 没出错  我不知道你文件里面都是什么 你完成的是什么  你仔细看看 有警告之类吗 编译的时候[/quote] 编译的时候没有警告……学生一小枚，学校课程里编程都用那个……

user: user-2
content: 引用 3 楼 wuxiaodi250 的回复:[quote=引用 2 楼 wangdahu888 的回复:] FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的 [/quote] vs2010不会报这错误

user: user-1
content: 引用 7 楼 wuxiaodi250 的回复:[quote=引用 6 楼 u011779875 的回复:] [quote=引用 4 楼 wuxiaodi250 的回复:] 各位大神们都来帮看啊！！！本菜鸟感激不尽啊！！！ 你用的什么编译器 怎么还用这种写法 for(int i = 0 ; i < 9; i++) 这是什么标准了啊 你不是用的C++编译器写的C吧  第二 这种情况最简单的方式 是先注释掉 第二个函数 看是否报错 排除 第二个 调试第一个  在检查是否是环境所造成的  你这个不像是逻辑错误 应该是环境有问题  仅供参考[/quote]  我用的是VC6.0…… 我已经调试过了，过程中没有错误，到最后一步就会跳出刚刚的那个框……[/quote] 不要用VC6.0来写C语言 VC6.0就是个bug  那个东西我看着就头疼 什么VC 垃圾 你要是写C 你就用别的 不要用C++来试图写C  除非你C已经很厉害了 且懂得俩个编译器的区别  我用别的gcc 编译器 没出错  我不知道你文件里面都是什么 你完成的是什么  你仔细看看 有警告之类吗 编译的时候

user: user-0
content: 引用 6 楼 u011779875 的回复:[quote=引用 4 楼 wuxiaodi250 的回复:] 各位大神们都来帮看啊！！！本菜鸟感激不尽啊！！！ 你用的什么编译器 怎么还用这种写法 for(int i = 0 ; i < 9; i++) 这是什么标准了啊 你不是用的C++编译器写的C吧  第二 这种情况最简单的方式 是先注释掉 第二个函数 看是否报错 排除 第二个 调试第一个  在检查是否是环境所造成的  你这个不像是逻辑错误 应该是环境有问题  仅供参考[/quote]  我用的是VC6.0…… 我已经调试过了，过程中没有错误，到最后一步就会跳出刚刚的那个框……

user: user-1
content: 引用 4 楼 wuxiaodi250 的回复:各位大神们都来帮看啊！！！本菜鸟感激不尽啊！！！ 你用的什么编译器 怎么还用这种写法 for(int i = 0 ; i < 9; i++) 这是什么标准了啊 你不是用的C++编译器写的C吧  第二 这种情况最简单的方式 是先注释掉 第二个函数 看是否报错 排除 第二个 调试第一个  在检查是否是环境所造成的  你这个不像是逻辑错误 应该是环境有问题  仅供参考

user: user-3
content: 代码没看懂，期待解决方案，学习下

user: user-0
content: 各位大神们都来帮看啊！！！本菜鸟感激不尽啊！！！

user: user-0
content: 引用 2 楼 wangdahu888 的回复:FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在 都存在呢！它出现的错误是这样的

user: user-4
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-5
content: 出错原因是在函数Cecb和Decb的以下2行定义的数组不够长: char keychar[8]; 在执行fscanf(fp2,"%s",keychar)时越界了(读入8个字符并在keychar[8]置字符串结尾0),破坏了栈. 改为: char keychar[8+1]; 可解决问题.

user: user-2
content: FILE* fp1=fopen("ecb2.txt","rb");  FILE* fp2=fopen("key.txt","rb"); 上述两个文件是否存在

user: user-6
content: 排个版先。。。  #include <stdio.h> #include <string.h> #include <stdlib.h>  int key[16][48]; char str[10000]; int str1[10000]; int len,num;  int IP1[64]={ 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17, 9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7};  int IP2[64]={ 40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25};  //生成k函数 int PC1[56]={ 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,33,15, 7,62,54,46,38, 30,22,14, 6,61,53,45,37, 29,21,13, 5,28,20,12,4 };  int PC2[48]={ 14,17,11,24, 1, 5, 3,28, 15, 6,21,10,23,19,12,4, 26, 8,16, 7,27,20,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};  void K(int *keychar){     int movebit[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};     int midkey[64];     int midkey2[56];     int i,j,n;     int o=0;      n=0;     for(i=0;i<8;i++)         for(j=0;j<8;j++){             o=keychar[i];             midkey[n++]=(o>>(7-j))&1;         }      for(i=0;i<56;i++)         midkey2[i]=midkey[PC1[i]-1];      for(i=0;i<16;i++){         int t[4];         t[0]=midkey2[0];         t[1]=midkey2[1];         t[2]=midkey2[28];         t[3]=midkey2[29];         if(movebit[i]==1){//循环左移             for(i=0;i<27;i++){                 midkey2[i]=midkey2[i+1];                 midkey2[i+28]=midkey2[i+29];             }             midkey2[27]=t[0];             midkey2[55]=t[2];         }         else{             for(i=0;i<26;i++){                 midkey2[i]=midkey2[i+2];                 midkey2[i+28]=midkey2[i+30];             }             midkey2[26]=t[0];             midkey2[27]=t[1];             midkey2[54]=t[2];             midkey2[55]=t[3];         }         for(i=0;i<48;i++)             key[n][i]=midkey2[PC2[i]-1];      } }  //生成F函数 int Ex[48]={ 32,1,2,3,4,5,4,5,6,7,8,9, 8,9,10,11,12,13,12,13,14,15,16,17, 16,17,18,19,20,21,20,21,22,23,24,25, 24,25,26,27,28,29,28,29,30,31,32,1};  int P[32]={ 16,7,20,21,29,12,28,17, 1,15,23,26,5,18,31,10, 2,8,24,14,32,27,3,9, 19,13,30,6,22,11,4,25};  int S[8][4][16]={     {         {14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},         {0,15,7,54,14,2,13,1,10,6,12,11,9,5,3,8},         {4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},         {15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}     },     {         {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},         {3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},         {0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},         {13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}     },     {         {10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},         {13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},         {13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},         {1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}     },     {         {7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},         {13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},         {10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},         {3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}     },     {         {2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},         {14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},         {4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},         {11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}     },     {         {12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},         {10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},         {9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},         {4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}     },     {         {4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},         {13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},         {1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},         {6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}     },     {         {13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},         {1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},         {7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},         {2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}     } };  void f(int *rp,int n,int S){     int t[4],i;     for(i=0;i<4;i++){         t[i]=S%2;         S=S/2;     }     for(i=0;i<4;i++)         rp[4*n+i]=t[3-i]; }  void F(int *r,int *key){     int rp[48]={0};     int i;     for(i=0;i<48;i++)         rp[i]=r[Ex[i]-1];      for(i=0;i<48;i++)         rp[i]=rp[i]^key[i];      int n,x,y;     x=y=0;     for(i=0;i<48;i+=6){         n=i/6;         x=(rp[i]<<1)+rp[i+5];         y=(rp[i+1]<<3)+(rp[i+2]<<2)+(rp[i+3]<<1)+rp[i+4];         f(rp,n,S[n][x][y]);     }      int t[32];     for(i=0;i<32;i++)         t[i]=r[i];     for(i=0;i<32;i++)         r[i]=t[P[i]-1]; }  void Encode(int *str,int *keychar){     int l[32],r[32],t[32];     int i,j,n;     K(keychar);      int data[64];     n=0;     int o=0;     for(i=0;i<8;i++)         for(j=0;j<8;j++){             o=str[i];             data[n++]=(o>>(7-j))&1;           }      for(i=0;i<32;i++){         l[i]=data[IP1[i]-1];          r[i]=data[IP1[i+32]-1];     }     for(i=0;i<16;i++){         for(j=0;j<32;j++)             t[j]=r[j];         F(r,key[i]);         for(j=0;j<32;j++){             r[j]=r[j]^l[j];             l[j]=t[j];         }     }      int a,b;     a=b=0;     for(i=0;i<32;i++){         data[i]=r[i];         data[i+32]=l[i];     }      for(i=0;i<32;i++){ //逆初始值换         l[i]=data[IP2[i]-1];         r[i]=data[IP2[i+32]-1];     }      for(i=0;i<32;i++){         a=(l[i]&0x1)+(a<<1);         b=(r[i]&0x1)+(b<<1);          if((i+1)%8==0){             str[i/8]=a;             a=0;             str[i/8+4]=b;             b=0;         }     } }  void Decode(int *str,int *keychar){     int l[32],r[32],t[32];     int i,j,n;     K(keychar);      int data[64];     n=0;      int o=0;     for(i=0;i<8;i++)         for(j=0;j<8;j++){             o=str[i];             data[n++]=(o>>(7-j))&1;           }      for(i=0;i<32;i++){         l[i]=data[IP1[i]-1];              r[i]=data[IP1[i+32]-1];      }      for(i=0;i<16;i++){         for(j=0;j<32;j++)             t[j]=r[j];         F(r,key[15-i]);         for(j=0;j<32;j++){             r[j]=r[j]^l[j];             l[j]=t[j];         }     }      int a,b;     a=b=0;     for(i=0;i<32;i++){         data[i]=r[i];         data[i+32]=l[i];     }      for(i=0;i<32;i++){//逆初始值换         l[i]=data[IP2[i]-1];             r[i]=data[IP2[i+32]-1];     }      for(i=0;i<32;i++){         a=(l[i]&0x1)+(a<<1);         b=(r[i]&0x1)+(b<<1);         if((i+1)%8==0){             str[i/8]=a;             a=0;             str[i/8+4]=b;             b=0;         }     } }  void Cecb(){     char keychar[8];     int key2[8];     int in[8];            int len;      FILE* fp1=fopen("ecb1.txt","rb");      fseek(fp1, 0, SEEK_END);     len=ftell(fp1);       fseek(fp1, 0,SEEK_SET);      for(int c=0;c<len;c++){         fscanf(fp1,"%c",&str[c]);         str1[c]=str[c];     }     fclose(fp1);      FILE* fp2=fopen("key.txt","rb");     fscanf(fp2,"%s",keychar);     fclose(fp2);      for(int d=0;d<8;d++)         key2[d]=keychar[d];      int m=len/8+1;     printf("请选择填充方式：1:PKCS 7\t2:ISO 9797M2\t3:ANSI X9.23\n");     scanf("%d",&num);     if(num==1){         for(int o=0;o<8-len%8;o++){             str1[len+o]=8-len%8;         }     }     if(num==2){         for(int p=0;p<8-len%8;p++){             str1[len+p]=80;         }     }     if(num==3){         for(int q=0;q<8-len%8;q++){             str1[len+q]=0x00;             if(q==8-len%8-1)                 str1[len+q]=8-len%8;         }     }      FILE* fp3=fopen("ecb2.txt","w");     for(int z=0;z<m;z++){         for(int g=0;g<8;g++){             in[g]=str1[z*8+g];         }         Encode(in,key2);         for(int h=0;h<8;h++){             str1[z*8+h]=in[h];             fprintf(fp3,"%c",in[h]);         }     }     fclose(fp3); }  void Decb(){     char keychar[8];     int key2[8];     int in[8];            int len;      FILE* fp1=fopen("ecb2.txt","rb");      fseek(fp1, 0, SEEK_END);     len=ftell(fp1);       fseek(fp1, 0,SEEK_SET);     fclose(fp1);      FILE* fp2=fopen("key.txt","rb");     fscanf(fp2,"%s",keychar);     fclose(fp2);      for(int d=0;d<8;d++)         key2[d]=keychar[d];      int m=len/8;      FILE* fp3=fopen("ecb3.txt","w");     int x;     for(int z=0;z<m;z++){         for(int g=0;g<8;g++){             in[g]=str1[z*8+g];         }         Decode(in,key2);         if(z==m-1){             if(num==1){                 for(x=0;x<8-in[7];x++)                     fprintf(fp3,"%c",in[x]);             }             if(num==2){                 for(x=0;in[x]!=80&&x<8;x++)                     fprintf(fp3,"%c",in[x]);             }             if(num==3){                 for(x=0;x<8-in[7];x++)                     fprintf(fp3,"%c",in[x]);             }         }         else{             for(x=0;x<8;x++)                 fprintf(fp3,"%c",in[x]);         }     }     fclose(fp3); }  int main() {     Cecb();     Decb();      return 0; }