2017-02-03 2 views
-1
#include <iostream> 
#include<cstdlib> 
#include<ctime> 

using namespace std; 

int* randomNumbers(int min, int max, int size); 
int main() 
{ 
    int min = 20; 
    int max = 100; 
    int size = 10; 
    int* nums; 

    nums = randomNumbers(min,max,size); 
    cout << "***************"<<endl; 

    for(int i = 0; i < size;i++) 
    { 
     cout << *(nums+i) << endl; 
    } 


    return 0; 

} 


int* randomNumbers(int min, int max, int size) 
{ 
    int* random = new int[size]; 
    unsigned seed = time(0); //time elapsed since Jan 1, 1970 
    srand(seed); 

    for (int i = 0;i<size;i++) 
    { 
     *(random+i) = rand() % ((max+1)-min) + min; 
     cout<<*(random+i)<<" "; 

    } 

    cout<<endl; 

    delete[] random; 
    return random; 
} 

Так что, если я запускаю этот код в Xcode (Macbook), он отлично работает, однако если я запускаю это в CodeBlocks (Windows), первые два числа, напечатанные из основной функции, указаны в миллионах, но первые два числа, напечатанные из randomNumbers(), находятся в ожидаемом диапазоне. Я не понимаю, почему печать чисел в основной функции меняет первые два значения? Остальное в порядке. Я действительно нечурный, не стесняюсь задавать вопросы по моему вопросу.Возникли проблемы распечатывания первых два числа в динамически распределяемый массиве, остальные номера работают нормально

+2

'удалить [] случайным образом; return random; 'Возможно, это неверно. – Borgleader

+0

'a [i]' гораздо читабельнее (и меньше подвержено ошибкам), чем '* (a + i)'. – molbdnilo

+0

Добро пожаловать в переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –

ответ

0
delete[] random; 
    return random; 

Вы удаляете массив!

Любой доступ к вашему массиву после его удаления не определен. Очистите массив, когда вы закончите с ним.

Перемещение удалить здесь:

for(int i = 0; i < size;i++) 
{ 
    cout << *(nums+i) << endl; 
} 

delete[] nums; 
return 0; 
+0

Не рекомендуется для кода C++. Есть лучший способ достижения _динамического хранения allocaiton_. –

+0

Пожалуйста, потратьте немного времени на исправление отступов. Если OP может понять это правильно, вы также сможете это сделать. – NathanOliver

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