Каково значение по умолчанию в массиве после использования malloc для структуры в C - PullRequest
1 голос
/ 19 октября 2019

Предположим, у меня есть этот код:

typedef char BLOCK[10];
typedef struct {
  BLOCK block;
}Object;

И я делаю это:

Object* obj;
obj = malloc(sizeof(obj));

Мой вопрос:
Будет ли массив "блок"есть значение по умолчанию в каждой ячейке?

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

Предполагая, что 'ошибка' в вашем коде - просто опечатка (она должна быть obj = malloc(sizeof(*obj)); или вы выделите достаточно места для хранения указателя ), тогда в стандарте нет ничегочтобы указать, к чему будут инициализированы выделенные данные.

Если вы хотите определенный режим инициализации, то вы можете использовать calloc:

obj = calloc(1, sizeof(*obj)); // Note: sizeof(obj) = pointer size but sizeof(*obj) is struct size

, который инициализирует всеВыделенные байты равны нулю.

0 голосов
/ 19 октября 2019

malloc () не инициализирует выделенную память. Смотри man malloc.

...