请教一个程序运行出错的问题,编译环境 visual stdio 运行平台 WIN7 32
问题描述:程序编译无语法错误,运行阶段弹出错误框
visual sdtio 调试出错描述:
Windows 已在 kill.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 kill.exe 中或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 kill.exe 具有焦点时按下了 F12。
输出窗口可能提供了更多诊断信息。
代码如下
程序代码:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> int str_to_num(char *str,int n); void strs_to_nums(char *str,int *data,int n); void nums_to_strs(int *num,char *string); void function(int countA,int countB,int flag,int n,int i); int arrary[5][4]; int *data; int _tmain(int argc, _TCHAR* argv[]) { FILE *fpin,*fpout; char str[10], *datastring; int num1,num2,flag,n,counta,countb,i; fpin=fopen("c:\\ponit.in","r"); fpout=fopen("c:\\ponit.out","w"); if(fpin==NULL||fpout==NULL){ printf("打开文件失败\n"); exit(0); } fgets(str,5,fpin); num1=str_to_num(str,5); while(num1-->0){ fgets(str,10,fpin); num2=str_to_num(str,10); datastring=(char*)malloc(sizeof(char)*2*num2+2); //堆操作函数用的是malloc 释放堆的函数为free data=(int*)malloc(sizeof(int)*num2); fgets(datastring,2*num2+2,fpin); strs_to_nums(datastring,data,num2); i=0; while(num2>=0){ flag=0;counta=0;countb=0; function(counta,countb,flag,num2,i); if(arrary[i][4]==1){ num2=arrary[i][3]; i++; } else{ fputs("unkonw",fpout); break; } } free(datastring); free(data); datastring=(char*)malloc(sizeof(char)*8); for(i=5;i>=0;i--){ if(arrary[i][4]==1){ nums_to_strs(arrary[i],datastring); fputs(datastring,fpout); } } free(datastring); } free(fpin); free(fpout); return 0; } int str_to_num(char *str,int n) { int i=0,num=0; for(;i<n;i++){ if(str[i]=='\n'||str[i]=='\0') break; num=num*10+str[i]-30; } return num; } void strs_to_nums(char *str,int *data,int n) { int i=0; for(;i<n;i++){ if(str[2*i]=='x'){ data[i]=10; continue; } data[i]=str[2*i]-30; } } void nums_to_strs(int *num,char *string) { int i,j=0,k=0; char p[8]; while(k<2){ itoa(num[k],p,10); for(i=0;i<8;i++){ if(p[i]=='\0') break; string[j]=p[i]; j++; } if(k==0) string[j]=':'; } string[j]='\0'; } void function(int countA,int countB,int flag,int n,int i) { int j; for(j=n-1;j>=0;j--){ if ((countA==21&&countB<=19) || (countA>21 && (countA-countB==2))){ arrary[i][0]=countA; arrary[i][1]=countB; arrary[i][3]=j+2; arrary[i][4]+=1; return; } if ((countA=21&&countA-countB<-1) || (countA>21 &&((countA-countB<-1)||(countA-countB>2)))) return; if(flag==0){ countA+=data[j]; flag=1; } if(flag==1){ countB+=data[j]; flag=0; } if(j>0&&data[j-1]==10){ function(countA,countB,flag,j+1,i); if(flag=0) flag=1; if(flag=1) flag=0; function(countA,countB,flag,j+1,i); } } }
[ 本帖最后由 zhu224039 于 2014-6-28 01:08 编辑 ]