這種錯誤的可能原因是什麼?正在寫入的文件沒有問題,但是每次都會失敗fwrite
。fwrite失敗(返回0,perror給出「Bad address」)
我正在從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
給出了「錯誤的地址」作爲錯誤。
任何建議,將不勝感激。
顯示你在哪裏分配你傳遞給'push'的指針。 –
在如此多的層次上這是錯誤的...... – littleadv
@littleadv:在知道代碼的上下文和目的之前,絕對不應該說這是「正確」還是「錯誤」。考慮到字段名稱,字段類型和其他字段,我認爲這段代碼沒有什麼「真實」。這段代碼看起來像是爲實驗而做的實驗。你的「風格與設計」建議正在破壞實驗的目的。 – AnT