Приветствую. Используя mysql возникла потребность в клонирование типа MYSQL_ROW row в другой динамический массив для длительного хранения.
mysql_t MysqlSelect(char *base, char *sql)
{
if(base != NULL && sql != NULL)//входные данные
{
if(mysql.array != NULL)// Если было использование ранее то очистить
{
for(int step = 0; mysql.array[step]; step++)//очищаю каждый элемент массива
free(mysql.array[step]);
free(mysql.array);
mysql.array_len = 0;// дефолтное количество элементов
}
for(int step = 0; step <= (int)strlen(sql); step++)// считаю сколько нужно данных для выборки
if(sql[step] == ',')
mysql.array_len++;
mysql.connect = mysql_connection_setup(base);
mysql.result = mysql_perform_query(mysql.connect, sql);
if((mysql.row = mysql_fetch_row(mysql.result)) != NULL)
{
mysql.array = (char**)malloc(sizeof(mysql.row) * sizeof(char**));// устанавливаю количество элементов
for(int step = 0; step <= mysql.array_len; step++)
{
if(mysql.row[step] != NULL)
{
mysql.array[step] = (char*)calloc(sizeof(mysql.row[step]), sizeof(mysql.row[step]) * sizeof(char*)); //заполняю элементы
strcpy(mysql.array[step], mysql.row[step]);
}
}
}
mysql_free_result(mysql.result);
mysql_close(mysql.connect);
}
else
printf("--> Log: input variables are nulled\n");
return mysql;
}
В целом все работает, но valgrind указывает на утечки памяти, может есть более правильный метод реализации моей задачи?