【问题标题】:How to create a dynamically sized global array?如何创建动态大小的全局数组?
【发布时间】:2020-04-07 10:50:28
【问题描述】:

我正在制作一个多线程程序来查找 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;
 }  

【问题讨论】:

    标签: c multithreading pthreads dynamic-memory-allocation


    【解决方案1】:

    你不能在函数之外有一般性的陈述。

    简单的解决方案是在main 函数中读取输入,然后也在main 函数中创建数组。

    并将数组作为局部变量保存在函数内部,并将其作为参数传递给要调用的函数(连同其大小)。


    要将多个参数集中到线程函数,请创建一个以“参数”为成员的结构,并将指针传递给一个这样的结构。

    【讨论】:

    • @shresthish56: int main(void) { int N; scanf("%d", &amp;N); int prime_arr[N]; memset(prime_arr, '\0', sizeof(prime_arr)); (因为你不能在 VLA(可变长度数组)上使用初始化器。如果你的编译器太陈旧以至于它不支持 VLA,你会必须使用malloc()(或calloc(),它保存memset() 操作)和free()
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2010-09-20
    • 2014-11-18
    • 2011-07-13
    • 2011-09-17
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多