作为三重指针的 char temp 变量在第一次迭代后不会更新

问题描述 投票:0回答:0

我正在尝试做一个大学项目。我正在尝试将 u1、u2、u3 等用户 ID 存储在临时三重指针中,以便我以后可以使用它们,但问题是第一次,即当 i=0 时,然后是 temp工作正常并更新用户但是当我第二次将 temp 传递给 ReadDataFromFile() 函数时(i = 1)它不会更新并继续在其中拥有垃圾值。

class users
{
private:
ID = firstName = lastName = 0;
        LikedPages = new Page * [12];
        FriendList = new User * [20];
        for (int i = 0; i < 12; i++)
            LikedPages[i] = 0;
        for (int i = 0; i < 20; i++)
            FriendList[i] = 0;
        LikedPagesCounter = 0;
        AddedFriendsCounter = 0;
public:
void ReadDataFromFile(fstream& myData, char**& array, int index)
    {
        char buffer[80];
        myData >> buffer;
        ID = Helper::GetStringFromBuffer(buffer);
        myData >> buffer;
        firstName = Helper::GetStringFromBuffer(buffer);
        myData >> buffer;
        lastName = Helper::GetStringFromBuffer(buffer);
        *buffer = {};
        int i = 0, j = 0;
        while (1)
        {
            myData >> buffer;
            if (*buffer == '-')
            {
                array[i] = nullptr;
                break;
            }
            else
            {
                int k = 0;
                while (k < 2)
                {
                    array[index][j] = buffer[k];
                    j++;
                    k++;
                }
                array[index][j] = ' ';
                ++j;
                AddedFriendsCounter++;
            }
            array[index][j] = '\0';
            i++;
        }
    }
User* SearchUserByID(char*& buffer)
    {
        char* currentUserID;
        int count = 0;
        int j;
        for (int i = 0; i < 20; i++)
        {
            bool flag = true;
            currentUserID = users[i]->getUserID();
            for (j = 0; currentUserID[j] != '\0'; j++)
            {
                if (currentUserID[j] != buffer[j])
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                count = j;
                while (count > 0)
                {
                    int k = 0;
                    for (k; buffer[k] != '\0'; k++)
                    {
                        buffer[k] = buffer[k + 1];
                    }
                    buffer[k - 1] = '\0';
                    count--;
                    if (buffer[0] == ' ')
                        ++count;
                }
                return users[i];
            }
        }
        return nullptr;
    }
void AssociateFriends(User** array)
    {
        for (int i = 0; i < AddedFriendsCounter; i++)
        {
            FriendList[i] = array[i];
        }
    }
};
class Facebook
{
private:
User**users;
public:
void LoadUsersFromFile(const char* myFile)
    {
        fstream myData;
        char*** temp = nullptr;
        User** tempAddedFriends = nullptr;
        myData.open(myFile, ios::in);
        if (myData)
        {
            int total;
            myData >> total;
            users = new User * [total];
            temp = new char**[total];
            tempAddedFriends = new User * [20];
            for (int i = 0; i < total; i++)
            {
                temp[i] = new char* [20];
                for (int j = 0; j < 20; j++)
                {
                    temp[i][j] = new char[20];
                }
            }
            for (int i = 0; i < total; i++)
            {
                users[i] = new User;
                users[i]->ReadDataFromFile(myData, temp[i], i);
}
            for (int i = 0; i < total; i++)
            {
                for (int j = 0, k = 0;; j++)
                {
                    tempAddedFriends[j] = SearchUserByID(temp[i][k]);
                    int length = Helper::GetLength(**temp);
                    if (!length)
                        break;
                }
                users[i]->AssociateFriends(tempAddedFriends);
            }
for (int i = 0; i < total; i++)
{
    for (int j = 0; j < 20; j++)
    {
        delete[] temp[i][j];
    }
    delete[] temp[i];
}
delete[] temp;

        }
        else
        {
            cout << "\nNO USERS INFORMATION EXISTS";
        }
        myData.close();
    }
};

我尝试了不同的解决方案,比如发送 temp(直接三指针)、temp[i][j](发送单指针),但似乎没有任何效果。已经浪费了 2 天时间,如果有人能提出解决方案,我们会很高兴。我不想使用矢量或双指针,因为这不是项目的要求。如果有人能解决这个问题而不是新方法,我们会很高兴。谢谢!

c++ oop pointers dynamic-memory-allocation chararray
© www.soinside.com 2019 - 2024. All rights reserved.