uczę tej funkcji malloc i mogę korzystać z niektórych pomocy:malloc i nieważne Wskaźniki
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
wiem, że malloc func przydziela pamięć dla dowolnego typu, jeśli jest wystarczająco dużo pamięci, ale linie Nie rozumiem, że:
p = (void *)malloc_ptr;
malloc_ptr += size;
Jak może wskazywać na taki typ danych? Po prostu nie mogę zrozumieć tego pustego wskaźnika ani jego lokalizacji.
UWAGA: malloc_ptr jest niepodpisany długo
Ten kod zawiera założenie, że wskaźnik do 'unsigned long' (czyli' malloc_ptr') może również wskazać do dowolnego innego obiektu, z punktu widzenia wyrównania. To założenie nie zawsze jest prawdziwe (na przykład w niektórych systemach może nie być w stanie wskazać obiektów 'long double'). –
Kod zakłada, że żaden typ nie wymaga bardziej rygorystycznego wyrównania niż czterobajtowe wyrównanie. Kod nie pokazuje, w jaki sposób zainicjowano 'free_mem_ptr' i' free_mem_end_ptr'. Nie zwraca wartości NULL, gdy nie ma więcej miejsca. Jeśli funkcja 'error()' powróci, wtedy całe piekło się rozpadnie. –