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);
Другие вопросы по тегам