【发布时间】:2010-03-04 18:50:35
【问题描述】:
我正在尝试将参数传递给父文件,该文件应该为每对参数创建一个子进程。子进程将把每一对相加并将它们的总和返回给父进程。如果传入的参数数量为奇数,我会在 argv 数组的末尾添加一个 0 以使其均匀。这种情况一直在发生,直到所有参数都加起来,最后打印出它们的总和。
除了我传入偶数个参数时,一切正常。子进程将成功添加前两个参数并返回它们,但是当父进程执行 sprintf 时(第 58 行)总是有一个 segmentation fault。
这是父进程和子进程的代码(我使用的是 pastebin,所以这里看起来不是很混乱。它们将在一天后过期,所以如果需要我可以重新发布它们):
第二个文件在编译时必须调用worker 才能被第一个文件运行。我在Ubuntu 9.10上使用gcc
以下是一些关于如何运行程序的示例:
gcc -o parent parent.c
gcc -o worker worker.c
./parent 1 2 3 4
(上面的示例将以segmentation fault 结尾,就像我在上面解释的那样)。答案应该是10,因为(1 + 2) + (3 + 4) = 10。
虽然传入奇数个参数,但下面的这个可以正常工作:
./parent 1 2 3
这个问题的答案应该是6。
任何帮助将不胜感激!
【问题讨论】:
-
你有一个错误。该错误不在
sprintf中。 -
这不仅仅是一个错误;这是对事情如何运作的误解。该程序似乎正试图完全按照他的意愿去做——这就是问题所在:-)
-
@Alok:我刚刚使链接可点击(OP 无法做到这一点,因为他只有 1 个代表),所以希望这能让你的生活更轻松。
-
感谢您的帮助。当我第一次开始制作这个程序时,出于好奇,我尝试将其添加到 artray 中,并且似乎奏效了。这就是为什么我尝试更进一步,但我现在意识到我不应该修改 argv 和 argc
标签: c process segmentation-fault parent printf