2014-01-09 66 views
0

代碼: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不會初始化爲零,如維基百科和in this thread所述。 Python/Cython/C的背後發生了什麼?

回答

1

對於所有意圖和目的,malloc'ed內存塊的內容將被視爲隨機和未確定。在分配的緩衝區中找到的值可能是之前釋放的內存塊的內容。

0

缺省情況下由malloc()分配的內存包含垃圾值。 malloc()不會將內存初始化爲零。 0(零)可以是垃圾值之一。