gpt4 book ai didi

c++ - C++ : why does free not accept a const void*, 中的 malloc/free 有更好的方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:32 29 4
gpt4 key购买 nike

<分区>

将 C++11 代码连接到某些 C 回调,我必须传递 const char * const *,即字符串数组。这是我的代码的简化版本:

int main(int,char**){
const int cnt = 10;
const char * const * names =
static_cast<const char * const *>(malloc( sizeof(char*) * cnt));
//... allocating names[0], etc. coming soon ...
the_c_function(names);
free(names);
return 0;
}

所以我弄清楚了如何在 C++ 中使用 malloc,但我仍然停留在 free 上,因为它告诉我:“来自 'const void*' 的无效转换‘作废*’ [-fpermissive]”

我的第一 react 是“嗯?你为什么要关心,你所要做的就是释放指针。”第二个 react 是把它扔掉。但这会被编译器拒绝:

free( const_cast<void*>(names) );

这也是:

free( static_cast<void*>(acctnames) );

例如“从类型‘const char* const*’到类型‘void*’的无效 static_cast”。

什么工作是一个很好的'ole C cast:

free( (void*)(acctnames) );

这样安全吗,还是我漏掉了什么? (valgrind 告诉我“所有堆 block 都被释放了——没有泄漏是可能的”,这让我感到安慰!)

附言在 Linux 上使用 g++ 4.8.1。

更新:为什么 free() 想要一个非常量指针的解释在这里:Unable to free const pointers in C(虽然我发现下面的 barak manos's answer 更清楚)。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com