Поток 1: Ошибка EXC_BAD_ACCESS (код=1, адрес=0x0) продолжает возникать во время выполнения

#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 только .