Я пытаюсь передать аргументы в родительский файл, который должен создать дочерний процесс для каждой пары аргументов. Дочерние процессы сложат каждую пару и вернут их сумму родительскому процессу. Если передано нечетное количество аргументов, я добавляю 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
.
Любая помощь будет принята с благодарностью!