2017-01-03 3 views
0
//in header file(in User class): 
int howManyOpponents =0; 
User** userArray; //(which is initialized to userArray = new User*[5] in the constructor) 

//in class file: 
void User::addWin(User* aUser) 
{ 
    userArray[howManyOpponents] =aUser; 
    howManyOpponents++; 
} 

//in main file 
int maximumUser = 20; 
User* userList[maximumUser]; 
(*userList[i]).addWin(userList[j]); 

codeclocks перестает работать, я проследил проблему с пользователем :: addWin и попробовал много разных настроек ссылок или указаний, но не смог обработать его. Может быть простая ошибка. Спасибо.codeblocks C++ перестает работать, может быть связано с привязкой

+1

Добро пожаловать в Stackoverflow. Пожалуйста, покажите, что означает «перестает работать» и предоставляет [mcve] –

+2

Несвязанные: глобальные переменные, используемые как это, в программе на C++? Почему бы не использовать 'std :: vector' вместо массивов? Подумайте об использовании RAII, умных указателей вместо голого 'нового'. – Unimportant

+0

Остановить использование необработанных указателей, все эти проблемы исчезнут –

ответ

1
User* userList[maximumUser]; 

Создает массив maximumUserUser указателей. Конкретных экземпляров User не построено.

затем Вы пытаетесь вызвать метод с одним из этих неиницализированных указателей, причиной аварии:

(*userList[i]).addWin(userList[j]); 

Чтобы исправить, создать массив фактических User экземпляров (предполагается, что User «s конструктора не требуют аргументов) :

User userList[maximumUser]; 
userList[i].addWin(userList[j]); 
0

Рассмотрите возможность передачи аргумента по ссылке вместо передачи их указателями. Старайтесь избегать использования raw poiters в вашем коде. Если вам действительно нужны указатели, подумайте об использовании интеллектуальных указателей.

0

Вот пример о том, как использовать массивы указателей:

size_t maxUsers = 5; 
    size_t maxUserLen = 48; 
    char** UserList = 0; 

    // First, allocates a array of pointers 
    UserList = new char*[maxUsers]; 

    // Second, allocates each pointers in the array of pointers 
    for(size_t i=0; i<maxUsers; i++) 
    { 
     UserList[i] = new char[maxUserLen]; 
     memset(UserList[i], 0, maxUserLen); 
    } 

    // Add user 
    const char* user1 = "Mike"; 
    const char* user2 = "James"; 

    strcpy(UserList[0], user1); // First element in the list 
    strcpy(UserList[1], user2); // Second element in the list, etc... 
Смежные вопросы