В следующем коде будет высвобождаться Dairy
бесплатно Yogurt
?
Оба указывают на тот же адрес, насколько я знаю.C - Freeing 'inherited' structure
Кроме того, этот стиль кодирования плохой практики? Скажите, если я только указал указатели на Dairy
и косвенно освободил Yogurt
и Cheese
?
#include <stdlib.h>
typedef struct {
int calcium;
int protein;
} Dairy;
typedef struct {
Dairy dairy;
int sugar;
int color;
} Yogurt;
int main() {
Yogurt* yogurt = malloc(sizeof(Yogurt));
Dairy* dairy = &yogurt->dairy;
free(dairy); // Will this free yogurt?
}
Указатели на молочные продукты и йогурты соответствовали тому, когда я их печатал. Смогу ли я полагаться на это или это специфический компилятор? –
@GM: его четко определен, Обновлен справочник со стандарта. –
Спасибо за ваш ответ! –