2017-01-03 2 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]); 

Il peut y avoir un bug simple. Merci.codeblocks C++ cesse de fonctionner peut être dû à référence

+1

Bienvenue sur Stackoverflow. S'il vous plaît montrer ce que "arrête de travailler" signifie et fournir un [mcve] –

+2

Non apparenté: variables globales, utilisées comme ça, dans un programme C++? Pourquoi ne pas utiliser 'std :: vector' à la place des tableaux? Envisagez d'utiliser RAII, des pointeurs intelligents au lieu de 'new' nu. – Unimportant

+0

Cessez d'utiliser des pointeurs bruts, tous ces problèmes disparaissent –

Répondre

1
User* userList[maximumUser]; 

crée un tableau de pointeurs maximumUserUser. Aucune instance réelle de User n'est construite.

Vous essayez alors d'appeler une méthode avec un de ces pointeurs non initialisées, provoquant l'accident:

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

Pour fixer, créer un tableau de User réelles instances (en supposant que le constructeur de User ne nécessite pas d'arguments) :

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

Considérer passer argument par référence au lieu de les passer par des pointeurs. Essayez d'éviter d'utiliser bruters poiters dans votre code. Si vous avez vraiment besoin de pointeurs, pensez à utiliser des pointeurs intelligents.

0

Voici un exemple sur la façon d'utiliser des tableaux de pointeurs:

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...