codeblocks c ++停止工作可能是由于引用

时间:2017-01-03 20:03:36

标签: c++ pointers reference codeblocks

//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停止工作,我已经将问题追溯到User :: addWin并尝试了许多不同的引用或指向设置但无法处理它。可能有一个简单的错误。 谢谢。

3 个答案:

答案 0 :(得分:1)

User* userList[maximumUser];

创建一个maximumUser User指针数组。没有构建User的实际实例。

然后尝试使用其中一个未初始化的指针调用方法,导致崩溃:

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

要修复,请创建一个实际User个实例的数组(假设User的构造函数不需要参数):

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

答案 1 :(得分:0)

考虑通过引用传递参数,而不是通过指针传递它们。尽量避免在代码中使用原始的poiters。如果你真的需要指针,请考虑使用智能指针。

答案 2 :(得分: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...