У меня есть что-то вроде этого:
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 первых элементов. Затем терминал показывает некоторые очень большие числа.
Это потому, что вы используете
static int n = 0;
затем выделите память для нулевых элементов.
Измените строку static int n = 256;
например, выделить память на 256 элементов.
Или, если вы читаете n
после, выделите память ПОСЛЕ того, как вы прочитали n
. То есть объявить массив глобально сначала (технически указателем), как int *arr;
, тогда
arr = new int[n];
после cin >> n;
static
- это перегруженное ключевое слово.
То, как вы его используете, означает перевод-unit-local.
Кроме того, у вас нет глобального массива в вашем коде, только указатель инициализирован, чтобы указывать на начало выделения 0 int
s.
Это распределение не будет изменено, если вы позже измените n
.
i < n
поскольку ваш массив имеет индекс от 0 до n-1.