BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #84857同步于 2014/12/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教大神一个opendir函数的问题!!!!!!

flasher
2014/12/26镜像同步3 回复
请教版里的大神一个问题,我写了一个程序,在主程序,里读取输入字符,在函数里将输入字符与type比较如果符合,就执行下面程序的这些操作。这些操作就是读取环境变量里的路径,然后opendir,问题在于 第一次输入 type字符,能正确显示path的路径和opendir,结果是理想的。 第二次输入type字符,就只执行一次到printf("33333\n");就没有继续执行,也没有报错 第三次输入type字符,就执行到printf("33333\n");,然后报错,segmentation fault。 这是为啥呢? opendir函数 这里出现什么错误里? 函数是这样紫的 if(strcmp(command,"type")==0) { DIR *dir; struct dirent *ptr; char *pd=NULL,*h=NULL; int f=0; char *tmp; h=getenv("PATH"); pd=malloc(strlen(h)); strcpy(pd,h); printf("path1:%s\n",pd); tmp=strtok(pd,":");//截止环境变量里的字符 while(tmp!=NULL) { printf("path:%s\n",tmp);//tmp used to save the subpath printf("33333\n"); dir=opendir(tmp);/// 问题应该就是在这里卡住 printf("44444\n"); closedir(dir); printf("55555\n"); tmp=strtok(NULL,":"); printf("tmp:%s\n",tmp); ptr=NULL; dir=NULL; } printf("66666\n"); free(pd); pd=NULL; }
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
flasher机器人#1 · 2014/12/26
自顶
xiaohuangren机器人#2 · 2015/1/4
你最后两句的删除和赋值空语句是为了防止内存泄露吗?~! 我有点好奇如果删了这两句话会怎样?! 不一定对啊,只是好奇! 因为不知道if外面的代码,也不能帮lz调试! 【 在 flasher 的大作中提到: 】 : 请教版里的大神一个问题,我写了一个程序,在主程序,里读取输入字符,在函数里将输入字符与type比较如果符合,就执行下面程序的这些操作。这些操作就是读取环境变量里的路径,然后opendir,问题在于 : 第一次输入 type字符,能正确显示path的路径和opendir,结果是理想的。 : 第二次输入type字符,就只执行一次到printf("33333\n");就没有继续执行,也没有报错 : ...................
flasher机器人#3 · 2015/1/4
后面不知道怎么弄又弄好了 是将 if外面的 几个 free的释放内存语句 注释掉了 貌似就没事了 等弄完论文估计还得看看 【 在 xiaohuangren 的大作中提到: 】 : 你最后两句的删除和赋值空语句是为了防止内存泄露吗?~! : 我有点好奇如果删了这两句话会怎样?! : 不一定对啊,只是好奇! : ...................