3

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

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

这是我的代码,它可以工作,但我将指针表示为 64 位整数,并希望以更简洁/便携的方式进行:

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

3 回答 3

2

演员表long long只是额外的包袱。改为void *

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

(我假设这是针对某种 freelist 或类似的,即您不需要同时使用该结构。)

于 2012-11-07T17:13:04.553 回答
1

会发现什么my_area[0]是指向某物的指针,对吧?

然后您可以将 my_area 分配为 type 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;
于 2012-11-07T17:09:16.893 回答
0

定义一个内部 8 字节数组的结构。用您的自定义结构替换所有 long long 类型引用。这样,您将不依赖于特定于平台的 long long 大小。该结构在所有平台上都是 64 位(如果您担心对齐,可以添加 #pragma pack)

于 2012-11-07T17:14:07.800 回答