[英]Access violation reading location 0x00000014. Using Streams
所以我有這個ifStream,它可以從文件中讀取所有內容。 我讀了一行以檢查我正在讀的項目的類型。然后,在我讀完那行之后,我將流傳遞給另一個類,該類又讀了更多的類,但是當到達該類時,它將引發此異常。 訪問沖突讀取位置0x00000014。 這是顯示此錯誤的代碼。
void Author::readData(ifstream & stream1)
{
string line = "";
getline(stream1, name); //The error happens here
if (stream1.fail() && stream1.eof())
{
throw Error(-1);
}
else if (stream1.fail() && !(stream1.eof()))
{
throw Error(0);
}
getline(stream1, address);
if (stream1.fail() && stream1.eof())
{
throw Error(-1);
}
else if (stream1.fail() && !(stream1.eof()))
{
throw Error(0);
}
}
void Book::readData(ifstream & stream1)
{
(*theAuthor).readData(stream1); //This is where the function is called. Let me check to see if It is even initialized here.
if (stream1.fail() && stream1.eof())
{
throw Error(-1);
}
else if (stream1.fail() && !(stream1.eof()))
{
throw Error(0);
}
getline(stream1, title);
if (stream1.fail() && stream1.eof())
{
throw Error(-1);
}
else if (stream1.fail() && !(stream1.eof()))
{
throw Error(0);
}
我已經在許多不同的網站上進行了研究,但似乎找不到任何能解釋為什么ifstream拋出此異常的原因。 請幫忙。
編輯:添加了更多代碼,希望對您有所幫助。
顯示的代碼沒有任何問題。
您所閱讀的所有這些網站並沒有完全向您解釋,僅僅是因為C ++程序在特定行上崩潰並不意味着該漏洞所在。 我可以很容易地提出一個最小的示例,即strcpy()
超出數組末尾,破壞堆棧,然后繼續執行大量工作,並且只有在嘗試從函數返回時才崩潰。 C ++中的return
語句沒有任何問題,但是此時代碼將崩潰。
您的getline()
調用或使用方式沒有任何問題。
編程錯誤或錯誤通常會導致內存損壞,但是在對內存進行遍歷之后,代碼可能不會立即以任何有意義的方式嘗試使用它,而是繼續使用它。 稍后在某個指針處,程序將返回並嘗試使用其數據結構,遇到垃圾並崩潰。
最可能的解釋是,較早發生的一個錯誤最終導致遍歷您的std::ifstream
和/或名稱std::string
。 現在,您可以調用getline()
從流中讀取到此字符串中,並且代碼崩潰了。 或者,也許是某個東西弄亂了指向此Author
類實例的指針。 試圖執行此類方法。 代碼之所以炸毀是因為name
類成員顯然是完全垃圾。 該錯誤當然不會在這里,但是只要指向該Author
類的指針搞砸了。
獲得問題幫助的唯一方法是發布一個最小,完整且可驗證的示例 ,任何人都可以編譯,執行和重現您的錯誤(注意“最小”要求,這並不意味着您可以發布整個代碼)。
您將需要研究整個程序的其余部分,以查找錯誤。 歡迎使用C ++。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.