2014-11-19 2 views
0

У меня есть что-то вроде этого:глобальный статический массив в C++

static int n = 0; // global static int 
int *arr = new int[n]; // global int* 

int randToArray(int arr[], int min, int max) { 
    srand(time(NULL)); 
    for(int i = 0; i <= n; i++) { 
     arr[i] = (rand() % max + min); 
    }   
} 

void printArray() { 
    if(n) { 
     for(int i = 0; i < n; i++) 
     cout << arr[i] << endl; 
    } else 
     cout << "The array hasn't been drawed yet.";   
} 

А потом в главной функции У меня есть меню с переключателем и опциями для получения случайных чисел и печати массива:

switch(option) { 
case 1: 
    cout << "Set the size of the array: "; 
    cin >> n; 
    randToArray(arr, 1, 99); 
    break; 
case 2: 
    printArray(); 
    wait(); 
    break; 
} 

Мне нужен мой массив, который будет доступен по всему миру для использования в нескольких других функциях.

Все работает, кроме одного: когда я хочу напечатать массив, я получаю работоспособность только 8 первых элементов. Затем терминал показывает некоторые очень большие числа.

+0

** n ** - ноль? Это будет работать неправильно. Кроме того, независимо от размера n, вы хотите, чтобы ваш цикл заканчивался на 'i

+0

Где ... вы видите глобальный статический массив? – Deduplicator

ответ

4

Это потому, что вы используете

static int n = 0;

затем выделить память для нулевых элементов.

Измените строку static int n = 256;, например, выделите память на 256 элементов.

Или, если вы прочитали n после, выделите память ПОСЛЕ того, как вы прочитали n. То есть, объявить массив глобально первого (технически указатель), а int *arr;, то

arr = new int[n]; 

после cin >> n;

+0

отсутствует, если (arr) удалить [] arr; перед новым распределением. – SHR

+0

@SHR, да, OP должен проверить это :) – vsoftco

0

static гораздо перегружен ключевых слов.
То, как вы его используете, означает перевод-блок-локальный.

Кроме того, у вас нет глобального массива в вашем коде, только указатель инициализирован, чтобы указывать на начало выделения 0 int s.
Это распределение не будет изменено, если вы позже измените n.

Смежные вопросы