用Dev-c++编写程序产生一个访问违例(段异常)

yoyo_yue 2009-12-10 10:09:59
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+调试的话,就会出现程序产生一个访问违例(段异常)
请各位大虾帮帮忙吧!~~
...全文
696 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyo_yue 2009-12-10
  • 打赏
  • 举报
回复
povdata的定义:
struct povdata
{
point a;
point b;
point c;
point d;
float h;
float t;
};
kouwenlong 2009-12-10
  • 打赏
  • 举报
回复
povdata是个什么东东?
damingg 2009-12-10
  • 打赏
  • 举报
回复
如果是工作中的代码,建议楼主先把指针搞清楚了再去调试代码
如果是学习中的例子,不妨把完整代码贴出来
firsthym 2009-12-10
  • 打赏
  • 举报
回复
没看懂
iptr = stdin; 
yoyo_yue 2009-12-10
  • 打赏
  • 举报
回复
原谅我,C++的小菜鸟.....
按照楼上说的,分配的空间,还是不对,问题仍旧存在......
大虾们,继续帮帮忙吧~~~
damingg 2009-12-10
  • 打赏
  • 举报
回复
看出来了,楼主完全是在草菅指针(人命)
damingg 2009-12-10
  • 打赏
  • 举报
回复
char *astr;
char *bstr;
char *cstr;
char *dstr;
char *reststr;

好像没看到有分配空间
而后面却有赋值
sscanf(str, "prism{%f,%f,%d, <%s>, <%s>, <%s>, <%s>,%s", hl, ht, n, astr, bstr, cstr, dstr, reststr);
liubuweiright 2009-12-10
  • 打赏
  • 举报
回复
地址访问出错,指针出错了。。。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧