const char **和free()

时间:2015-12-18 02:05:14

标签: c visual-studio malloc 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开头的。

这是来自Visual的错误还是我错过了什么?

注意:我可以停用警告,或通过转换为void*内的free()来关闭警告。但是,如果它只是一种愚弄编译器并且仍然存在某些问题的方法,那听起来并不合适。

所以问题确实是:编译器错误(并且不需要转换为void*)?

1 个答案:

答案 0 :(得分:3)

const char**仍然是带有const限定符的指针,无论它是指向基本类型还是指向另一个指针。这就是出现警告的原因。

在这种情况下,在你自由呼叫时施放指针是很好的。例如:

free((void *)tableNames);

或者:

free((char **)tableNames);