N>а тогда как поэлементно очистить память от того что создается в первом цикле?
Небольшое дополнение к сказанному.
Проблема (точнее говоря, некий эффект) никак не связана со спецификой приведенного примера.
Можно сделать один malloc, потом free, и убедиться, что память (скорее всего) операционной системе не вернули.
Если желание поуправлять размером адресного пространства процесса преодолеть не удается,
то ответ лежит в районе mallopt или чего-нибудь специфичного для используемого менеджера памяти.
Если еще глубже, то brk и sbrk, но это уже не Posix и
эти функции не предназначены для использования широкими народными массами.