用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+调试的话,就会出现程序产生一个访问违例(段异常)
请各位大虾帮帮忙吧!~~
{
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+调试的话,就会出现程序产生一个访问违例(段异常)
请各位大虾帮帮忙吧!~~
...全文
相关推荐
Dev-Cpp 5.4.0
很小巧很强大的一个C/C++编译器,安装时间不到1分钟,我平时在图书馆的电脑上经常使用,比visual C++ 6.0好多了。 欢迎有需要的朋友下载,真心推荐。
Dev-Cpp 5.5.3 + MinGW 4.7.2 一站式C++开发环境安装与实战
Dev-Cpp 5.5.3 是基于 Windows 平台的轻量级 C/C++ 集成开发环境,采用Scintilla作为代码编辑引擎,具备语法高亮、自动补全和代码折叠等现代编辑功能。其界面简洁直观,适合初学者快速上手,同时支持项目管理与调试集成,满足中级开发者需求。要在 Dev-Cpp 中启用 C++11,必须手动添加编译标志。进入:在“Additional command line options”输入框中添加:-std=c++11。
Dev-Cpp 5.4.0编程软件C++下载C语言免费版
免费的,很好用,蓝桥杯比赛时用的软件
dev-cpp5.11官方版本
官方地址 https://sourceforge.net/projects/orwelldevcpp/ 默认英语安装就好,安装好之后会有修改语言的提示
DEV C++ Dev-Cpp_5.11
如果我们的操作系统使用 linux , unix,DEV C++ 将成为许多人的选择。


