繁体   English   中英

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

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

我有一个程序可以从文件夹的不同位置读取文件。 成功读取文件后,我将文件的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;
}

这是我得到的错误: http : //i.imgur.com/I9lv2zv.png

为什么即使分配了它也指向null? 我使用指针不正确吗?

您的循环没有任何意义。 如果仅考虑相关变量,则相当于代码

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM