C++-引发异常:读取访问冲突.变量为nullptr

C++ - Exception thrown: read access violation. Variable was nullptr

本文关键字:访问冲突 变量 nullptr 读取 异常 C++-      更新时间:2023-10-16

我有一个程序可以从文件夹的不同位置读取文件。成功读取文件后,我将文件的ifstream变量分配给一个临时变量。下面的代码是一个例子:

while (!CBAsales.eof())
    {
        string sFilePath = "Datafolder/CBA/";
        sFilePath = sFilePath.append(sFileName);
        // Read the csv file
        infile.open(sFilePath);
        if (!infile)
        {
            cout << sFileName << ": File not found!!!" << endl;
            exit(1);
        }
        while (getline(infile, record, 'n'))
        {
            while (!infile.eof())
            {
                if (record.size() > 0)
                {
                    //insert elements here
                }
            }
        }
        infile.close();
        mapIAG.insert(pair<string, Vector<Stock>>(sFileName, V1));
        }
    CBAsales.clear();
    CBAsales.seekg(0, ios::beg);
    tempSales = &CBAsales;
}

这是对文件的读取。现在您可以看到tempSales=&CBAsales;其中它被分配给一个临时变量。我全局声明了这些变量,下面显示了一个指向tempSales的指针。

ifstream codeindex;
ifstream IAGsales;
ifstream CBAsales;
ifstream NABsales;
ifstream * tempSales;
ifstream infile;

这里是我显示所有必要记录的地方:

cout << "Enter date of transaction" << endl;
while (!tempSales->eof())
{
    getline(*tempSales, record);
    cout << record << endl;
}

这是我得到的错误:https://i.stack.imgur.com/GwSuc.png

为什么它指向null,即使它被分配了?我用错指针了吗?

您的循环毫无意义。如果我们只考虑相关变量,它相当于代码

while (!CBAsales.eof())
{
    CBAsales.clear();
    CBAsales.seekg(0, ios::beg);
    tempSales = &CBAsales;
}

CBAsales在第一次测试中位于文件末尾,这意味着循环中的代码永远不会执行,或者循环永远不会执行。

如果循环从不执行,则语句tempSales = &CBAsales;从不执行,并且tempSales的初始值不变。