使用 void* 分配结构

Allocating a struct with void*

假设我已经定义了这些结构:

typedef struct LRU {
    int i;
} LRU;

typedef struct WS {
    char i;
} WS;

在我的 main 中,我定义了一个空指针:

void* mStruct = NULL;

根据情况,我需要使用这些结构之一,所以

if(!strcmp(algorithm, "LRU")) {
    mStruct = malloc(sizeof(LRU));
    mStruct->i = 1;
}
else if(!strcmp(algorithm, "WS")) {
    mStruct = malloc(sizeof(LRU));
}
else {
    printf("Unknown replacment algorithm %s\n", algorithm);
    return -1;
}

... // more code

free(mStruct);

但是这行代码给我一个错误:mStruct->i = 1;

那么我该如何访问该结构,如果这不是我的问题的理想解决方案,您能建议正确的处理方法吗?

请注意,我不想声明指向每个结构的指针(例如 LRU *lruPtr;

您可以改用联合:

union cache
{
    LRU lru;
    WS ws;
};

// ...

union cache *myCache = malloc(sizeof *myCache);
if(!strcmp(algorithm, "LRU")) {
    myCache->lru.i = 1;
}

你可以做类似的事情(你需要将 mStruct 从 void* 转换为 LRU*):

if(!strcmp(algorithm, "LRU")) {
    mStruct = malloc(sizeof(LRU));
    ((LRU*)mStruct)->i = 1;
}

但是这样的代码有味道,使用联合是更好的选择。