用Dev-c++编写程序产生一个访问违例(段异常)
int main(int argc, char *argv[])
{
char *povfile=NULL;
char *satfile=NULL;
int i, Num;
for(int i=1; i<argc; i++){
if(argv[i][0] == '-'){
if(strncmp(argv[i], "-i", strlen("-i"))==0){
if(i==argc-1){
fprintf(stderr, "Error: -i switch given but no input file specified.\n\n");
return 1;
}else{
povfile = argv[i+1];
}
}else if(strncmp(argv[i], "-o", strlen("-o"))==0){
if(i==argc-1){
fprintf(stderr, "Error: -o switch given but no output file specified.\n\n");
return 1;
}else{
satfile = argv[i+1];
}
}else{
return 1;
}
}
}
/************ Open POV file and parse ****************/
FILE *iptr;
if(povfile){
iptr = fopen(povfile, "r+");
}else{
iptr = stdin;
}
if(iptr){
//POV file Parse...
vector <povdata>povparsedata = ObjcetParse(iptr);
int Num;
Num = povparsedata.size();
vector<ObjectCoorParse> objname;
int BodyNum = 0;
while(BodyNum < Num)
{
objname[BodyNum].ObjectCoorInit(povparsedata[BodyNum]);
BodyNum++;
}
//.......
//Create SAT file...
FILE *optr;
if(povfile){
optr = fopen(povfile, "w+");
}else{
optr = stdout;
}
if(optr){
Output(Num, objname, optr);
if(optr != stdout){
fclose(optr);
}
}else{
fprintf(stderr, "Error: Unable to open %s.\n", povfile);
}
if(iptr != stdin){
fclose(iptr);
}
}else{
fprintf(stderr, "Error: Unable to open %s.\n", povfile);
return -1;
}
return 0;
}
vector<povdata> ObjcetParse(FILE* iptr)
{
int Num = 0;
vector<povdata> resultdata;
char str[10240];
char* strtemp = "prism{";
char *p;
int i;
char *astr;
char *bstr;
char *cstr;
char *dstr;
char *reststr;
float ht;
int n;
point ap;
point bp;
point cp;
point dp;
float hl;
float tl;
do{
i=READLINE(iptr,str,sizeof(str),0xa);
if(i==0){
p=strstr(str,strtemp);
if(p){
sscanf(str, "prism{%f,%f,%d,<%s>,<%s>,<%s>,<%s>,%s", hl, ht, n, astr, bstr, cstr, dstr, reststr);
tl = ht-hl;
sscanf(astr, "%f,%f", ap.X, ap.Y);
sscanf(bstr, "%f,%f", bp.X, bp.Y);
sscanf(cstr, "%f,%f", cp.X, cp.Y);
sscanf(dstr, "%f,%f", dp.X, dp.Y);
Num++;
resultdata[Num].a = ap;
resultdata[Num].b = bp;
resultdata[Num].c = cp;
resultdata[Num].d = dp;
resultdata[Num].h = hl;
resultdata[Num].t = tl;
}
}
}while(i>=0);
fclose(iptr);
return resultdata;
}
用Dev-c++编译可以通过,直接运行的话会出现"0x77c1c181"指令引用的"0X00000000"内存,该内存不能为"written".
用Dev-c+调试的话,就会出现程序产生一个访问违例(段异常)
请各位大虾帮帮忙吧!~~