Я думаю, вы неправильно понимаете, как работают указатели при распределении массивов. В самом первом цикле обнаружена утечка памяти, потому что вы меняете то, на что, как я полагаю, указывает указатель «память».
Выделение массива в C было бы как ниже.
int *bigspace;
bigspace = malloc(20 * sizeof(int));
Здесь мы сделали указатель "bigspace", указывающий на новый кусок памяти, в 20 раз превышающий размер целого числа, которое является массивом. Если вы сделали что-то, как показано ниже ..
int *bigspace;
bigspace = malloc(20 * sizeof(int));
bigspace = malloc(20 * sizeof(int));
Это не было бы Буэно. Сначала мы делаем указатель «bigspace» указателем на кусок памяти (массив целых чисел), а затем мы меняем то, на что указывает «bigspace», заставляя его указывать на новый кусок памяти. Это означает, что у вашей первой порции памяти больше нет указателя на нее, и эта память просочилась!