C++ 为函数中从文件读取的对象和整个程序可访问的数据分配内存

标签 c++ pointers object memory text-files

如何在 C++ 运行时创建未知数量的对象,我正在从文本文件中读取数据,不想浪费任何内存,即没有额外的对象,这必须在函数中完成。

Player* g_data()
{
    system("cls");
    char name[40];int level;
    fstream file;
    file.open("data.txt",ios::app|ios::in|ios::out);
    Player data[40],*ptr[100];
    int i=0;
    while(!file.eof()&&i<100)
    {
        file >>name>>level;
        strcpy(data[i].name,name);
        data[i].level=level;
        data[i].id=i;
        ptr[i]=&data[i];
        cout<<"Address-"<<ptr[i]<<"data"<<ptr[i]->name<<"id"<<ptr[i]->id<<endl;
        i++;
    }
    system("pause");
    return ptr[i-1];    
}

问题是我在返回对象后需要访问内存位置并且我不希望该内存消失(就像堆栈内存的情况一样),现在我如何分配内存并在整个过程中访问内存不浪费任何程序。

最佳答案

创建一个变量std::vector<Player>内部函数并插入其中,因此您可以在其中保留任意数量的播放器对象指针。您可以在函数结束时返回。

std:vector<Player> g_data()
{
    system("cls");
    char name[40];int level;
    fstream file;
    std:vector<Player*> Players;
    Player data[40];
    int i=0;
    while(file.open("data.txt",ios::app|ios::in|ios::out))
    {
        if ( i ==100)
            break;
        file >>name>>level;
        strcpy(data[i].name,name);
        data[i].level=level;
        data[i].id=i;
        Players.push_back(data);
        cout<<"Address-"<<ptr[i]<<"data"<<ptr[i]->name<<"id"<<ptr[i]->id<<endl;
        i++;
    }
    system("pause");
    return players;    
}

关于C++ 为函数中从文件读取的对象和整个程序可访问的数据分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863057/

相关文章:

c++ - 如何使 Boost 成为多线程?

c++ - 为什么在实现链接列表时 "delete at head"不能正常工作?

c++ - 如何使用OpenGL设置Visual Studio Code?

c++ - 使用 typedef'd uint 会导致错误,而 "unsigned int"不会...?

c++ - Const 指针的问题

c++ - 如何通过映射从派生类实例化对象

python - 链接到对象

c++ - 从另一个类调用时类中的方法出现问题

ruby - 更改 Ruby 对象的状态会更改其他类成员吗?

python - Python 中类似 JSON 的对象