造成这种错误的可能原因是什么。被写入的文件没有问题,但是每次fwrite都会失败。
我正在从32位的小终端移植到64位的大端。
我所写的结构是
struct Node
{
uint8_t *a;
uint32_t *b;
uint32_t c;
uint32_t d;
uint32_t e;
uint32_t f;
uint32_t g;
uint16_t h;
uint8_t i;
uint8_t j;
uint8_t k[MAX];
uint32_t (*l)[2];
uint32_t m;
uint32_t n;
Node() {
memset(this, 0, sizeof(*this));
l = NULL;
a = (uint8_t*)calloc(N,1);
}
~Node() {
free(a);
free(b);
}
};编写节点的代码是
void push(void *ptr)
{
Node *node = (Node *) ptr;
assert(fwrite(node, sizeof(Node), 1, fpw) == 1);
free(node);
}fpw具有全局范围。
当我尝试调试时,我发现fwrite返回0,perror提供“坏地址”作为错误。
如有任何建议,将不胜感激。
发布于 2011-11-02 06:19:35
我不确定我在这里是否有答案,但我认为值得指出的是,我在您的代码中看到了一些事情。我希望解决这些问题能帮助你克服你的问题。
Node类将有一个write/read集,或者是operator<</operator>>或您将要调用的任何其他常规例程集,并让它将自己序列化为一个文件,然后在读取时从文件中反序列化自己。Boost还为您提供了工具来帮助解决这个问题。ptr之前是否对push进行了测试,但我确信检查push本身中的指针是有帮助的,特别是如果错误表明它可能不好。free不应该在代码中的任何位置!你要用Node* node创建malloc吗?我希望不会!如果您使用的是new,则必须使用delete。a和b在您的~Node中,但是您没有将它们分配到任何地方。如果您没有在构造函数中分配它-当您在析构函数中删除它时-验证您分配了它们,否则您也会在这里得到一堆未定义的行为。只是一些情不自禁地注意到的事情,希望能有所帮助。
https://stackoverflow.com/questions/7976168
复制相似问题