我怎么能免费const char*
?我分配了新内存使用malloc
,当我试图释放它时,我总是收到错误"不兼容的指针类型"
导致这种情况的代码如下:
char* name="Arnold";
const char* str=(const char*)malloc(strlen(name)+1);
free(str); // error here
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 82
有几个人发布了正确答案,但由于某种原因,他们一直在删除它.你需要将它转换为非const指针; free
需要一个void*
,而不是const void*
:
free((char*)str);
Run Code Online (Sandbox Code Playgroud)
Tim*_*ost 24
你的代码是颠倒的.
这个:
char* name="Arnold";
const char* str=(const char*)malloc(strlen(name)+1);
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
const char* name="Arnold";
char* str=(char*)malloc(strlen(name)+1);
Run Code Online (Sandbox Code Playgroud)
该const
存储类型告诉你不打算一次分配(动态,或静态)修改的内存块的编译器.释放内存正在修改它.注意,你不需要转换malloc()的返回值,但这只是一个旁边.
在动态分配内存(你正在做的事情,基于其长度name
)并告诉编译器你无意使用它几乎没有用处.注意,使用含义写入内容,然后(可选)稍后释放它.
转换为不同的存储类型并不能解决您将存储类型改为开始的问题:)它只会发出警告消失,它试图告诉您一些事情.
如果代码反转(应该是),free()
将按预期工作,因为您实际上可以修改分配的内存.
malloc指向const的指针是没有意义的,因为你将无法修改其内容(没有丑陋的黑客攻击).
FWIW,gcc只是给出了以下警告:
//
// const.c
//
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char *p = malloc(100);
free(p);
return 0;
}
$ gcc -Wall const.c -o const
const.c: In function ‘main’:
const.c:8: warning: passing argument 1 of ‘free’ discards qualifiers from pointer target type
$
Run Code Online (Sandbox Code Playgroud)
你用的是什么编译器?