将指针地址存储在malloced内存中

时间:2012-11-07 17:05:20

标签: c pointers

这感觉就像一个愚蠢的问题,但我无法找到一个干净的解决方案,并且无法在大量其他指针相关问题中找到类似的问题。

我有一些动态分配的未知类型的内存,并希望在开始时将指针存储在其中。 malloc返回的动态内存应该适当对齐,所以我不认为在写入分配块的开头时我不必担心对齐。

这是我的代码,它有效,但我将指针表示为64位整数,并希望以更干净/可移植的方式执行:

void *my_area = malloc(512);
void *my_pointer = get_my_pointer();
((long long *) my_area)[0] = (long long) my_pointer;

3 个答案:

答案 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)