Я пытаюсь передать аргументы в родительский файл, который должен создать дочерний процесс для каждой пары аргументов. Дочерние процессы суммируют каждую пару и возвращают свою сумму родительскому процессу. Если передано нечетное количество аргументов, я добавляю 0 в конец массива argv, чтобы сделать его четным. Это происходит до тех пор, пока все аргументы не будут сложены и их сумма не будет напечатана в конце.
Все работает нормально, за исключением случаев, когда я передаю четное количество аргументов. Дочерний процесс успешно добавит первые два аргумента и вернет их, но затем, когда родитель выполнит sprintf
(строка 58), всегда будет segmentation fault
.
Вот код как для родительского, так и для дочернего процессов (я использую pastebin, поэтому здесь он не выглядит очень загроможденным. Срок их действия истечет через один день, поэтому я могу повторно опубликовать их, если это необходимо):
Второй файл должен называться worker
при компиляции, чтобы его мог запустить первый файл. Я использую gcc
на Ubuntu 9.10
Вот несколько примеров того, как запустить программу:
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
. - person Greg Hewgill   schedule 04.03.2010