我有这个结构:
typedef struct
{
int data[10];
} small_structure;
和这段代码:
small_structure *s_struct;
void * chunk;
chunk = malloc(1000);
s_struct = chunk;
可以这样做吗?忽略这是浪费记忆的事实。
答案 0 :(得分:4)
是的,只要有足够的内存,分配更多的内存总是合法的。
答案 1 :(得分:2)
是的,没关系。 malloc
将返回适当的对齐记忆。但是,只需将任意void *
指针分配给small_structure *
变量不即可。这意味着您的具体示例很好,但是类似于:
int function(void *p)
{
small_structure *s = p;
return s->data[0];
}
不是!如果p
没有针对small_structure *
指针进行适当的对齐,那么您只会导致未定义的行为。
答案 2 :(得分:2)
AFAICT,它没有任何问题(废物除外; - )。
请注意,在使用之前,您必须使用有用的数据填充结构。