Определите размер глобального массива из командной строки - PullRequest
2 голосов
/ 30 ноября 2010

Я делаю задание, где мне нужно использовать pthreads или семафоры для синхронизации некоторых процессов, которые обращаются к некоторому общему ресурсу.Поскольку все наши примеры в классе используют глобальную переменную в качестве общего ресурса, я планировал сделать то же самое, но я хотел основать значение общего ресурса на аргументе командной строки. Я знаю, как использовать аргументы командной строки в моем методе main, но как мне определить размер глобального массива (общего ресурса) на основе аргумента командной строки?

Обновление:

Кажется, что ответ Уоллика сработает, но я все еще не совсем уверен в некоторых деталях.Смотрите пример и комментарии ...

#include <stdio.h>

void print_array(void);

int *array;
int count;

int main(int argc, char **argv){
    int count = atoi(argv[1]);
    array = malloc(count *sizeof(array[0]));
    int i;
    for(i = 0; i < count; i++){ /*is there anyway I can get the size of my array without using an additional variable like count?*/
        array[i] = i;
    }
    print_array();
    return 0;
}

void print_array(){
    int i;
    for(i = 0; i < count; i++){
        printf("current count is %d\n", array[i]);
    }
}

Ответы [ 2 ]

8 голосов
/ 30 ноября 2010

Вы не можете сделать статическое динамическое объявление, например:

int globalarray[n];

Где n - переменная, установленная во время выполнения.Это не работает, потому что массив инициализируется до запуска программы.

Хорошей альтернативой является использование указателя на динамическую память:

int *globalarray;

int main (int argc, char **argv)
{
...
   int elements = atoi (argv [j]);  // parse out the program argument array size
   globalarray = malloc (elements * sizeof (globalarray[0]));
}
3 голосов
/ 30 ноября 2010

Глобальный указатель на массив malloc 'является одним из возможных решений.Таким образом, вы размещаете массив нужного размера в зависимости от аргумента командной строки и делаете указатель на массив видимым для всех ваших потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...