请参阅下面我使用的结构。我希望以便携的方式解决这个问题。
我用于查找结构绝对地址的代码是:((char*)data - sizeof(struct block);
其中 data 是结构块中数据的地址)。它不适用于此结构。
我做了一个测试程序,如下所示,最后一个断言失败了。
如果我更改unsigned int free:1;
为unsigned int free;
两个打印件将打印 12 ,因此 sizeof 给了我预期的结果。
提前致谢。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
struct block {
size_t size;
struct block* next;
unsigned int free:1;
char data[];
};
int main(void)
{
struct block* avail;
struct block* b;
avail = malloc(sizeof(struct block) + 10);
printf("%zu \n", sizeof(struct block)); // prints 12
printf("%zu\n", avail->data - (char*)&avail->size); //prints 9
b = (struct block*)((char*)avail->data - 9);
assert(b == avail);
b = (struct block*)((char*)avail->data - sizeof(struct block));
assert(b == avail);
return 0;
}
编辑:好像我在这里找到了堆栈溢出的答案:
它给了我正确的绝对地址。