2012-07-03 2 views
0

В динамически создаваемом массиве структур, для чего инициализируется каждая запись структуры?В массиве C структур, для чего инициализируются структуры?

Детали:
Если мы создаем динамический массив поплавки, как так:

float* arr = (float*) malloc (100 * sizeof (float)); 

то массив может быть заселен ничем (see here). Но у меня возникли проблемы оборачивать голову вокруг того, что происходит, когда мы подставим структур в течение поплавков, как так

typedef struct 
{ 
    float x = 123.456; 
} foo; 

foo* arr = (foo*) malloc (100 * sizeof (foo)); 

ли все элементы массива arr, созданного с полностью инициализированы foo структур или я должен ходить и вручную обновить значение x?

+1

Было ли это действительно необходимо? Это происходит как попытка получить очки репутации. – puk

ответ

3
typedef struct 
{ 
    float x = 123.456; 
} foo; 

Вы не можете иметь значения по умолчанию в типах структуры. Это недопустимый код C.

Объекты, выделенные malloc, имеют неопределенное значение.

+0

Даже не в C++ 11? –

+0

Это помечено как C, но даже в C11 это невозможно. – ouah

+0

Спасибо, что я не знал об этом. – puk

1

Нет разницы между поплавками и структурами. Вам необходимо вручную инициализировать каждую динамически выделенную область памяти.

1

Тот факт, что корпус float может быть «инициализирован», должен предоставить необходимый вам ответ - он фактически не инициализирован, но может содержать что угодно, потому что инициализация не выполняется. То же самое происходит с struct - инициализация не выполняется при распределении, поэтому возвращаемое (скорее всего) содержимое мусора в сегменте памяти является тем, что вы получите. Если вы заботитесь о содержимом вашей недавно выделенной памяти (и вы, вероятно, должны), вам нужно ее самостоятельно инициализировать.