В вашем коде два недопустимых свободных номера
Один здесь:
char *ptrTemp_string_holder;
// Points to the first character of a split string from the main string
char *t;
free(ptrTemp_string_holder );
, в то время как ptrTemp_string_holder
еще не инициализирован
секунда перед концом:
// Free the space that was allocated to this pointer
free(ptr_main_array);
потому что вы пытаетесь освободить локальную переменную arr в вызывающей функции
Эти два свободных должныбыть удаленным.
Обратите внимание, что определение ptrTemp_string_holder
должно быть
const char *ptrTemp_string_holder;
, потому что оно получает значение ptr_original_string
Это происходитиз-за невозможности освободить выделенную память
Вам необходимо освободить *ptr_main_array
и запомненный массив, кажется странным делать это в split else split не возвращает полезный результат, который должен быть выполнен в функции вызывающей стороны, например, добавление следующего main :
int main()
{
char **arr = NULL;
int count = split("aze,qsd", ',', &arr);
if (arr != NULL) {
for (int i = 0; i != count; ++i)
free(arr[i]);
free(arr);
}
}
Компиляция и выполнениепод valgrind :
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra -g s.c
pi@raspberrypi:/tmp $ valgrind --leak-check=full ./a.out
==10755== Memcheck, a memory error detector
==10755== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==10755== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==10755== Command: ./a.out
==10755==
==10755==
==10755== HEAP SUMMARY:
==10755== in use at exit: 0 bytes in 0 blocks
==10755== total heap usage: 3 allocs, 3 frees, 16 bytes allocated
==10755==
==10755== All heap blocks were freed -- no leaks are possible
==10755==
==10755== For counts of detected and suppressed errors, rerun with: -v
==10755== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 3)