使用 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;
}
但是这样的代码有味道,使用联合是更好的选择。
假设我已经定义了这些结构:
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;
}
但是这样的代码有味道,使用联合是更好的选择。