voID spawn_process_b(int fileID[]){ int pID; char * argv[2]; sprintf(argv[0],"%d",fileID[0]); sprintf(argv[1],fileID[1]); pID = fork(); if (pID == 0) { execv("PipeW1",argv); }}voID spawn_process_c(int fileID[]){ int pID; char * argv[2]; sprintf(argv[0],fileID[1]); pID = fork(); if (pID == 0) { execv("PipeW2",argv); }}
通过输入cout<<的断点“bp1”<< ENDL;等等,我发现spawn_process_b会执行得很好. spawn_process_c将进入,但在第一个sprintf指令处获得段错误.有人有主意吗?最初spawn_process_b给了我麻烦,而且...我的手给了上帝...我没有改变一件事,它开始工作了.我几乎想知道这是否可能依赖于环境?
解决方法 argv [0]是一个未定义的指针,指向sprintf时没有分配的存储空间.当它完全奏效的时候,它是偶然的,你所潦草的记忆正好发生在你的过程空间里.
argv的自动声明为两个char *指针分配空间.指针可能充满了垃圾(也就是说,它们指向随机位置)并且没有分配空间来存储它们中的字符.
你需要类似的东西
char *argv[3];for (int i = 0; i < 2; i++) argv[i] = malloc(space enough for my integer);argv[2] = 0;
最后一行对execv来说很重要
总结以上是内存溢出为你收集整理的C中出现奇怪的sprintf错误全部内容,希望文章能够帮你解决C中出现奇怪的sprintf错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)