【问题标题】:const char** and free() [duplicate]const char** 和 free() [重复]
【发布时间】:2015-12-18 02:05:14
【问题描述】:

我正在尝试使用 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 的错误还是我遗漏了什么?

注意:我可以禁用警告,或者通过在free() 中转换为void* 来关闭它。但是,如果它只是一种欺骗编译器并暴露于某些问题的方法,那听起来就不太对了。

所以问题真的是:这是一个编译器错误(并且不需要转换为void*)吗?

【问题讨论】:

    标签: c visual-studio malloc free


    【解决方案1】:

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

    在这种情况下,当您调用 free 时可以转换指针。例如:

    free((void *)tableNames);
    

    或者:

    free((char **)tableNames);
    

    【讨论】:

    • 看起来有点奇怪:释放指针表(不是const)并不意味着释放const char* 字符串使用的内存。事实上,它们还在那里。所以我不确定为什么要考虑 const 限定符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2013-01-25
    • 2016-01-08
    • 2020-09-04
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多