你应该不是 free
你得到的字符串.根据C11标准:
7.11.1.1
setlocale
功能
setlocale
函数返回的字符串指针 使得后续调用该字符串值及其相关类别将恢复该程序的语言环境的该部分.指向的字符串不应被程序修改,但可能会被后续的setlocale
函数调用覆盖
此外,Linux 手册页说:
该字符串可以在静态存储中分配.
如果您尝试过这会导致程序崩溃free
.
看起来Linux实现使用静态存储,但OSX使用静态存储malloc
.无论发生什么事情,你都不应该修改它,因为标准不允许你这样做 - 事实上它在OSX上是安全的是你应该忽略的实现怪癖.Valgrind在这里给你一个误报.
你应该不是 free
你得到的字符串.根据C11标准:
7.11.1.1
setlocale
功能
setlocale
函数返回的字符串指针 使得后续调用该字符串值及其相关类别将恢复该程序的语言环境的该部分.指向的字符串不应被程序修改,但可能会被后续的setlocale
函数调用覆盖
此外,Linux 手册页说:
该字符串可以在静态存储中分配.
如果您尝试过这会导致程序崩溃free
.
看起来Linux实现使用静态存储,但OSX使用静态存储malloc
.无论发生什么事情,你都不应该修改它,因为标准不允许你这样做 - 事实上它在OSX上是安全的是你应该忽略的实现怪癖.Valgrind在这里给你一个误报.