好的,所以我正在尝试从二进制文件中读取输入。我已经稍微更改了这段代码,但是在这个版本中,我遇到了访问冲突错误......所以它试图访问不存在的东西。这是我的问题区域的源代码:
void HashFile::fileDump (ostream &log)
{
HashNode *temp = new HashNode;
fstream bin_file;
bin_file.open ("storage_file.bin", ios::in | ios::binary);
for(int i = 0; i < table_size; i++)
{
bin_file.seekg( i * sizeof(HashNode) );
bin_file.read( (char *)&temp, sizeof(HashNode) );
printDump(HashNode(temp->title, temp->artist, temp->type, temp->year,
temp->price), log, i);
}
bin_file.close();
}
void HashFile::printDump(HashNode A, ostream &log, int N)
{
log << "(" << N << ") " << A.title << ", " << A.artist
<< ", " << A.type << ", " << A.year << ", $"
<< setprecision(2) << A.price << endl;
}
我知道我应该进行某种错误检查。现在错误发生在 printDump 函数中。每当我尝试输出到日志时,我都会收到访问冲突错误。但是,我将日志更改为 cout,我的代码将运行良好。它将读取我正确创建的二进制文件,直到它到达最后一个元素。对于我一直在测试的内容,table_size 应该等于 5。所以我进入 for 循环,并且 i 递增,直到它达到 5,然后它继续运行。table_size 正在更改为某个随机值,即使我没有实际接触过它。我是否以某种方式在内存中写入了 table_size 的地址?
这是我的节点的定义:
class HashNode
{
public:
HashNode();
~HashNode();
HashNode(string title, string artist, string type, int year, float price);
friend class HashFile;
private:
char title [35];
char artist [25];
char type [12];
int year;
float price;
};