#c
Вопрос:
Я пытаюсь запустить свою программу процессов, но я продолжаю получать «Поток 1: EXC_BAD_ACCESS (код=1, адрес=0x0)» каждый раз, когда я достигаю 1-го потока. Я пробовал разные значения и менял указатель, но все равно получаю одно и то же сообщение об ошибке. Любые предложения, и я поместил свой код ниже.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int Collatz(int num)
{
int count = 0;
if(num <= 0)
{
printf("<Starting Value> should be postive integer");
return 0;
}
while(count != 10000)
{
if(num == 1)
{
printf("%i ",num);
return 0;
}
else if(num % 2 == 0)
{
printf("%i ",num);
num /= 2;
}
else
{
printf("%i ",num);
num = num * 3 1;
}
count ;
}
return 0;
}
int main(int argc, char *argv[])
{
int num, stat_loc = 0;
pid_t pid;
num = atoi(argv[1]);
pid = fork();
if(pid == -1)
{
printf("Child process didnt get created.");
}
else if(pid == 0)
{
printf(": ");
Collatz(num);
}
else if(pid > 0)
{
wait(amp;stat_loc);
printf("n");
}
}
Комментарии:
1. Какие номера вы используете? Для меня нет ошибок с 10, 100 и 1.
2. То же, что и Стивен, без ошибок. Может быть, проблема возникла в другом месте
3. Неправильный доступ по адресу 0 — это ошибка разыменования нулевого указателя. Единственное, что я вижу в коде, — это доступ к
argv[1]
нему . Вы указали число в качестве аргумента командной строки? Что вы подразумеваете под «попытался изменить свой указатель»?4. Я предлагаю перейти
num = atoi(argv[1]);
наnum = argc > 1 ? atoi(argv[1]) : 0;
или что-то подобное. В принципе, не звонитеatoi(argv[1])
, еслиargc > 1
только .