const char** и free()
Я пытаюсь освободить таблицу указателей с помощью Visual Studio 2013.
const char** tableNames = malloc(NB_NAMES * sizeof(char*));
(...)
free(tableNames);
По какой-то причине Visual продолжает жаловаться:warning C4090: 'function' : different 'const' qualifiers
Я мог бы понять это предупреждение, если бы речь шла об освобождении const char*
, поскольку это может быть статический контент только для чтения.
Но const char**
(обратите внимание на второй *
) Это таблица указателей. Сама таблица должна быть освобождена, так как с самого начала она была malloc'd.
Это ошибка в Visual или я что-то упустил?
Примечание. Я могу отключить предупреждение или отключить его, выбрав void*
внутри free()
, Но это звучит неправильно, если это просто способ обмануть компилятор и остаться подверженным какой-либо проблеме.
Таким образом, вопрос на самом деле: ошибка компилятора (и приведение к void*
не должно быть необходимо)?
1 ответ
const char**
все еще указатель с const
квалификатор, независимо от того, указывает ли он на примитивный тип или на другой указатель. Вот почему предупреждение появляется.
В этом случае нормально навести указатель, когда вы звоните бесплатно. Например:
free((void *)tableNames);
Или же:
free((char **)tableNames);