gpt4 book ai didi

c++ - 访问冲突读取位置 0x00000014。使用流

转载 作者:行者123 更新时间:2023-11-28 05:34:21 25 4
gpt4 key购买 nike

所以我有这个 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 类的指针出现问题的任何地方。

获得解决问题帮助的唯一方法是发布 minimum, complete, and verifiable example任何人都可以编译、执行和重现您的错误(注意“最低”要求,这并不意味着您可以发布整个代码)。

您需要调查整个程序的其余部分,寻找您的错误。欢迎使用 C++。

关于c++ - 访问冲突读取位置 0x00000014。使用流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com