簡體   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