我正在尝试使用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*
)?
答案 0 :(得分:3)
const char**
仍然是带有const
限定符的指针,无论它是指向基本类型还是指向另一个指针。这就是出现警告的原因。
在这种情况下,在你自由呼叫时施放指针是很好的。例如:
free((void *)tableNames);
或者:
free((char **)tableNames);