这感觉就像一个愚蠢的问题,但我无法找到一个干净的解决方案,并且无法在大量其他指针相关问题中找到类似的问题。
我有一些动态分配的未知类型的内存,并希望在开始时将指针存储在其中。 malloc返回的动态内存应该适当对齐,所以我不认为在写入分配块的开头时我不必担心对齐。
这是我的代码,它有效,但我将指针表示为64位整数,并希望以更干净/可移植的方式执行:
void *my_area = malloc(512);
void *my_pointer = get_my_pointer();
((long long *) my_area)[0] = (long long) my_pointer;
答案 0 :(得分:2)
long long
的演员阵容只是额外的行李。转而使用void *
。
void *my_area = malloc(512);
void *my_pointer = get_my_pointer();
((void **) my_area)[0] = my_pointer;
(我认为这是针对某种freelist之类的,即你不需要同时使用该结构。)
答案 1 :(得分:1)
my_area[0]
中的内容是指向某事物的指针,对吗?
然后你可以将my_area分配为void **
类型,它代表一个指向包含内存区域的指针。
void **my_area = malloc(512 * sizeof(*my_area)); // alloc 512 pointer sized memory blocks
void *my_pointer = get_my_pointer();
my_area[0] = my_pointer;
答案 2 :(得分:0)
定义一个内部数组为8个字节的结构。用自定义结构替换所有long long类型引用。这样您就不会依赖于long long的特定于平台的大小。所有平台上的结构都是64位(如果你担心对齐,可以添加#pragma pack)