用void *分配结构

问题描述 投票:0回答:2

因此,我们已经定义了这些结构:

typedef struct LRU {
    int i;
} LRU;

typedef struct WS {
    char i;
} WS;

并且在我的主体中,我定义了一个空指针:

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;

c struct dynamic-memory-allocation void-pointers
2个回答
2
投票

您可以改用工会:

union cache
{
    LRU lru;
    WS ws;
};

// ...

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

0
投票

您可能会做类似的事情(您需要将mStruct从void*强制转换为LRU*):

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

但是这样的代码闻起来很香,并且使用联合是更好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.