Я пытаюсь передать аргументы родительскому файлу, который должен создать дочерний процесс для каждой пары аргументов. Детские процессы будут складывать каждую пару и возвращать свою сумму в родительский процесс. Если имеется нечетное число аргументов, я добавляю 0 в конец массива argv, чтобы сделать его четным. Это продолжается до тех пор, пока все аргументы не будут добавлены, и их сумма будет напечатана в конце.C sprintf, вызывающий ошибку сегментации
Все работает нормально, за исключением случаев, когда я передаю ровное количество аргументов. Детский процесс успешно добавит первые два аргумента и вернет их, но тогда, когда родительский код имеет 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'. –
Это больше, чем ошибка; это непонимание того, как все работает. Кажется, что программа пытается сделать именно то, что он хочет, и это проблема :-) – Pointy