以下は、sysctlを使用してPID50の特定のプロセスのargvを取得するC/ Obj-Cコードの簡略化された(エラー/ nullチェックは省略)スニペットです。
...
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で、予想よりも大きくなりますが、不合理ではないと思います。Mallocは成功します。sysctlへの2番目の呼び出しは-1を返し、errnoを22、E_INVALに設定します。
私はこの質問からのコードを含む他のコードを見てきましたが、私の問題はわかりません。私は何が欠けていますか?