У меня возникли проблемы с передачей массива, хотя exec. Я могу только когда-либо получить первый элемент после его прохождения. Я знаю, что указатель указывает только на голову, но остальное должно быть в непрерывной памяти.Проблема с доступом к массиву, прошедшему через execlp
//runner
int nums[10];
int* nums1=malloc(10*sizeof(int));
nums1=nums;//I know it's redundant
...
execlp("mean","mean",nums1,(char *)NULL);
//Mean.c main
int nums[10];
*nums=argv[1][0];
Остальная часть программы сумм, в цикле, значения НУМС, и делится на 10 для среднего значения.
Это дает мне первый элемент правильно в среднем, а остальное мусор, когда я пытаюсь пробежать числа. Я пробовал все, о чем я могу думать (* nums + i, nums [i]) и не могу понять, что вызывает ошибку. Число занятых заполняется правильно, но независимо от того, как я пытаюсь получить доступ к массиву после прохождения, мне дается только то, что я определил, это argv [1] [i], и все, что прошло мимо i = 0, не определено. То есть
10 0 4196061 0 0 0 0 0 4195984 0
против
10 3 5 6 33 23 2 3 3 4
Ваша '// я знаю, что это избыточная строка на самом деле * хуже *, чем избыточная. Это утечка памяти, потому что вы не 'free', что вы' malloc''d раньше! Кроме того, я не понимаю, почему вы определяете 'nums1' вообще, когда вы явно используете его как дополнительное имя для nums. – Jesin
'execlp' - это функция с переменными аргументами, также называемая эллипсом. Вы не можете развернуть массив в несколько аргументов эллипса. Если вы хотите иметь параметры в массиве и хотите передать массив в целом, тогда вы должны использовать 'execvp'. Обратите внимание, что 0-й элемент массива - это то, что передается как 'argv [0]' (в большинстве случаев такое же, как и путь), а последний элемент массива * должен * быть NULL. – Pablo
Также аргументы должны быть строками C! Просто потому, что вы не получаете предупреждение о компиляторе (из-за вариационной функции), это не значит, что ваш код правильный. Прочтите man-страницу функций, которые вы используете! Возможно, вы сначала хотите правильно изучить основы, прежде чем возиться с процессами и т. Д. – Olaf