Как уже указывалось, ваша структура неинициализирована, поэтому, скорее всего, она не заполнена NULL
.Самый простой способ получить нулевую инициализированную структуру в C - это использовать {0}
:
struct info a = {0};
. Вы можете исключить дополнительную переменную p
, вызвав allocate(&a);
напрямую.
В качестве более простого примера:
int main(void) {
int *p;
if (p == NULL) { // probably false
// ...
}
}
указатель выше не инициализирован.В отличие от других языков (таких как Java), p
не гарантированно будет ничем.
Альтернативный подход, который я бы порекомендовал вам в том, что вы делаете, - это создание вспомогательных функций для создания и уничтоженияinfo
объектов.
#include <stdlib.h>
struct info {
int *data;
};
struct info* new_info(void);
void free_info(struct info* p);
int main(void) {
struct info *p = new_info(); // user doesn't worry about creation details
// ... use p ...
free_info(p); // user doesn't worry about deletion details
}
struct info* new_info(void) {
struct info* p = malloc(sizeof *p);
p->data = malloc(sizeof *p->data);
return p;
}
void free_info(struct info* p) {
free(p->data);
free(p);
}