我在使用C ++编写和读取二进制文件时遇到了不好的时间。 我从堆栈问题中学到了很多东西,但是我从来没有让它工作过,我猜这个问题存在于阅读过程中,
以下是读取和保存方法:
void date::save(ofstream& fo){
fo.write((char *) &jour, sizeof(int));
fo.write((char *)&moi, sizeof(int));
fo.write((char *)&annee, sizeof(int));
size_t len = heure.size();
fo.write((char *)&len,sizeof(size_t));
fo.write(heure.c_str(), heure.size());
}
void date::load(ifstream& fi){
fi.read((char *)&jour, sizeof(int));
fi.read((char *)&moi, sizeof(int));
fi.read((char *)&annee, sizeof(int));
size_t len;
fi.read((char *)&len, sizeof(size_t));
char* temp = new char[len+1];
fi.read(temp, len);
temp[len] = '\0';
heure = temp;
delete [] temp;
}
另外:是否可以使用ofstream.write()函数直接保存具有动态属性的类?
非常感谢。
答案 0 :(得分:0)
在分配
时,第一眼看上去的读写似乎是正确的heure = temp;
有问题。 你分配len + 1字节的内存。 temp指向那个记忆的开头。 在你的任务(heure = temp)之后,heure也指向同样的记忆。然后你调用delete,从那时起,任何其他操作都可以将任何数据写入该内存(称为'野指针')。
你必须使用
strcpy(heure, temp);
将每个字节从temp复制到由heure分配的内存中。确保heure已经分配了足够的空间来容纳temp的所有字节。