Меня попросят поместить случайное посев в программу, которая вызывается, когда пользователь вводит в -r. Показано выглядетьСлучайное сеяние seg fault
-r1234567
Так как глобальная переменная I установить Random = 1234567.
Я добавил это в верхней части моей функции, а также:
printf("Seed: %d\n", Random);
srand48(Random);
Каждый раз, когда я использовать -r1234567 мою программу говорит и ошибка сегментации это:
Program received signal SIGSEGV, Segmentation fault.
____strtol_l_internal (nptr=0x0, endptr=0x0, base=10, group=<optimized out>,
loc=0x7ffff7ad8020) at ../stdlib/strtol_l.c:298
298 ../stdlib/strtol_l.c: No such file or directory.
(gdb) bt
#0 ____strtol_l_internal (nptr=0x0, endptr=0x0, base=10, group=<optimized out>,
loc=0x7ffff7ad8020) at ../stdlib/strtol_l.c:298
#1 0x00007ffff77589e0 in atoi (nptr=<optimized out>) at atoi.c:28
#2 0x0000000000401d8c in getCommandLine (argc=6, argv=0x7fffffffe238)
at prog.c:171
#3 0x0000000000401514 in main (argc=6, argv=0x7fffffffe238) at prog.c:35
(gdb) up
#1 0x00007ffff77589e0 in atoi (nptr=<optimized out>) at atoi.c:28
28 atoi.c: No such file or directory.
(gdb) up
#2 0x0000000000401d8c in getCommandLine (argc=6, argv=0x7fffffffe238)
at prog.c:171
warning: Source file is more recent than executable.
В моей команде, как: дело выглядит следующим образом:
while ((c = getopt(argc, argv, "g:n:a:h:s:d:v:r")) != -1)
case 'r': Random = atoi(optarg); break;
Таким образом, пользователь хочет рандомизировать использование семени. Они делают ./program -r1234567. Затем это переходит в две строки кода, которые я поставил выше, и должен рандомизировать.
Любые предложения?
Просьба показать более полный пример, например показать, что такое «Случайный», и как оно объявлено/определено и возможно назначено. Было бы лучше, если бы вы сделали небольшой, но полный пример, также известный как [SSCCE] (http://sscce.org/). Вы также можете отредактировать свой вопрос, чтобы включить полную откат от отладчика. –
Я добавил bt и попытался объяснить это еще немного. – user081608
В отладчике, когда вы находитесь в кадре # 2 (т. Е. В функции 'getCommandLine'), попробуйте напечатать значение' optarg'. Или, возможно, добавить вызов 'printf', прежде чем вызывать' atoi', чтобы увидеть фактическое значение 'optarg'. –