请教一个程序运行出错的问题,编译环境 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 编辑 ]









