2016-07-15 4 views
0

извините, если это глупый вопрос, но я пытаюсь написать программу, которая сравнивает 7 чисел, которые пользователь вводит в 7 номеров, которые генерирует компьютер (своего рода лотерейный симулятор). Однако, когда я пытаюсь ввести 7 номеров, которые пользователь вводит, программа вылетает после второго входа. Пожалуйста, помогите, и спасибо заранее!Ошибка EXC_BAD_ACCESS с массивами в C++

Это начало моей основной:

#include <iostream> 
    #include <iomanip> 
    #include "Implementation.hpp" 

    using namespace std; 

    int main() 
    { 
    string name; 
    cout << "What is your name?\n"; 
    getline(cin, name); 
    while(1 != 0) //I know this will never be true, I'm just doing it  
        //because the return statement will 
    {    //end the program anyways if the user inputs 2 
     int *userNums = new int[7]; 
     int *winningNums = new int[7]; 
     int cont; 
     int matches; 

     cout << "LITTLETON CITY LOTTO MODEL\n"; 
     cout << "--------------------------\n"; 
     cout << "1) Play Lotto\n"; 
     cout << "2) Quit Program\n"; 
     cin >> cont; 
     if(cont == 2) 
      return 0; 

     getLottoPicks(&userNums); 

И это функция getLottoPicks:

void getLottoPicks(int *picks[]) 
{ 
    int numsAdded = 0, choice; 
    while(numsAdded <= 7) 
    { 
     cout << "Please input a valid number as your lotto decision.\n"; 
     cin >> choice; 
     if(noDuplicates(*picks, choice) == false) 
      continue; 
     *picks[numsAdded] = choice; 
     numsAdded++; 
    } 
} 

Я абсолютно уверен, что это проблема с указателями, что я пытаясь использовать, но без них я не могу фактически изменить массивы, которые я не думаю, и я не мог заставить функцию возвращать массив.

ответ

0

Если вы используете C++, то вы, вероятно, лучше используете std::vector<int> и передаете ссылку на вектор в getLottoPicks.

Однако ваш код должен передавать только int * в getLottoPicks и должен обрабатывать < 7 элементов - это классический вариант.

вызов getLottoPicks:

getLottoPicks(userNums); 

и новый getLottoPicks код:

void getLottoPicks(int *picks) 
{ 
    int numsAdded = 0, choice; 
    while(numsAdded < 7) 
    { 
     cout << "Please input a valid number as your lotto decision.\n"; 
     cin >> choice; 
     if(noDuplicates(picks, choice) == false) 
      continue; 
     picks[numsAdded] = choice; 
     numsAdded++; 
    } 
} 
+0

Спасибо за быстрый ответ и для ловли ВЫКЛЮЧЕНО одной ошибки, однако код не будет компилироваться, когда я попробуйте передать (userNums) в качестве параметра вместо (& userNums) и убрать звездочку от picks [numsAdded] = выбор; заставляет его не компилироваться. Еще раз спасибо за помощь, и, надеюсь, этот вопрос не слишком серьезен. –

+0

Подпись getLottoPicks изменилась - теперь она принимает только 'int *', вам также придется внести аналогичные изменения в подпрограмму 'noDuplicates' – Petesh