Как создать динамический размер глобального массива? - PullRequest
0 голосов
/ 07 апреля 2020

Я делаю многопоточную программу для поиска простых чисел в C. Как мне принять вход в следующую C программу и не использовать (#define N = 88)? Я получаю следующую ошибку:

main.c:8:7: error: expected declaration specifiers or ‘...’ before string constant
 scanf("%d", &N);
       ^~~~
#include <stdio.h>
#include <pthread.h>
#include <conio.h>

#define MAX_THREADS 4

int N;
scanf("%d", &N);
int prime_arr[N]={0};

void *printprime(void *ptr)
{
    int  j,flag;
    int i=(int)(long long int)ptr;
    while(i<N)
    {
        printf("Thread id[%d] checking [%d]\n",pthread_self(),i);
        flag=0;
        for(j=2;j<=i/2;j++)
        {
            if(i%j==0)
            {
                flag=1;
                break;
            }
        }

        if(flag==0 && (i>1))
        {
            prime_arr[i]=1;
        }
        i+=MAX_THREADS;
  }
}

int main()
{
    pthread_t tid[MAX_THREADS]={{0}};
    int count=0;
    for(count=0;count<MAX_THREADS;count++)
    {
        printf("\r\n CREATING THREADS %d",count);
        pthread_create(&tid[count],NULL,printprime,(void*)count);
    }
    printf("\n");
    for(count=0;count<MAX_THREADS;count++)
    {
        pthread_join(tid[count],NULL);
    }

    int c=0;
    for(count=0;count<N;count++)
        if(prime_arr[count]==1)
            printf("%d ",count);

    return 0;
 }  

1 Ответ

2 голосов
/ 07 апреля 2020

Вы не можете иметь общие операторы вне функций.

Простое решение - прочитать входные данные в функции main, а затем создать массив также в функции main.

И сохраните массив как локальную переменную внутри функции и передайте его в качестве аргумента вызываемым функциям (вместе с его размером).


Для массирования нескольких аргументов в потоке создайте структуру с аргументами в качестве членов и передайте указатель на одну из таких структур.

...