Ниже приведен урезанный (проверки на ошибки/нулевые значения опущены) фрагмент кода C/Obj-C, который использует sysctl для получения argv определенного процесса с PID 50.
...
int getProcessArgs[3] = { CTL_KERN, KERN_PROCARGS, 50 };
sysctl(getProcessArgs, 3, NULL, &length, NULL, 0);
char* processArgs = malloc(length * sizeof(char));
sysctl(getProcessArgs, 3, processArgs, &length, NULL, 0);
...
Первый вызов sysctl (для определения размера массива строк argv) завершается успешно. Возвращаемая длина составляет ~ 1600, больше, чем я ожидал, но я полагаю, что это разумно. Маллок преуспевает. Второй вызов sysctl возвращает -1, устанавливая для errno значение 22, E_INVAL.
Я просмотрел другой код, в том числе из этот вопрос, но не вижу проблемы с моей. Что мне не хватает?