Проблема, вероятно, в вашем коде выделения памяти.Следующая строка
new->values = (char **) malloc(sizeof(char *) * size);
выделяет массив из char
указателей, содержащих size
элементов.Следовательно, в этом нет необходимости:
for(unsigned int i = 0; i < size; i++){
new->values[i] = (char *)malloc(sizeof(char *));
}
То, что вы здесь делаете, - это сохранение char **
приведения к char *
в каждом элементе массива new->values
.То есть вы выделяете достаточно памяти для хранения значения char *
, а затем сохраняете указатель на эту память в массиве new->values
.Я предполагаю, что вы сделали это по ошибке, потому что
new->values = (char **) malloc(sizeof(char *) * size);
уже выделил достаточно памяти для каждого элемента массива new->values
.
Я предполагаю, что вы хотите:
for(unsigned int i = 0; i < size; i++){
new->values[i] = (char *)malloc(sizeof(char) * MAX_STRING_LENTH);
}
для создания буфера char
из MAX_STRING_LENGTH
элементов для каждого элемента массива new->values
.Это позволяет вам хранить строку в каждом элементе, и ваш free
код должен работать нормально.
В качестве альтернативы, если элементы new->values
установлены где-то еще, то вы, вероятно, не хотитебыть free
их в вашем деконструкторе, если только они не были распределены динамически, и вы не знаете, что других ссылок на них в этот момент не существует.