C/Cython: начальное содержимое выделения памяти malloc

Код:

cpdef values(int n):
    cdef size_t i
    cdef double * v = <double *> malloc(sizeof(double) * n)
    if v is NULL:
        abort()
    for i in range(n):
        print v[i]

Вывод:

>>> values(5)
1.06816855917e-306
0.0
0.0
0.0
0.0

Вопрос:
Почему эта функция печатает нули и откуда берется начальное число / что оно означает? Я думал, что в отличие от calloc, malloc не инициализируется нулем, как сказано в википедии и в этой теме. Что здесь происходит за кулисами Python/Cython/C?


person embert    schedule 09.01.2014    source источник


Ответы (2)


Для всех намерений и целей содержимое malloc блока памяти следует рассматривать как случайное и неопределенное. Значения, найденные в выделенном буфере, могут быть содержимым ранее освобожденных блоков памяти.

person Dariusz    schedule 09.01.2014

Память, выделенная malloc(), по умолчанию содержит мусорные значения. malloc() не инициализирует память нулем. 0 (ноль) может быть одним из значений мусора.

person Chinna    schedule 09.01.2014