我正在尝试释放我使用 malloc
函数分配的空间,但每次收到此消息时:
"malloc: 对象 0x7ffeefbff510 的 *** 错误:指针被释放是 未分配"
即使我清楚地分配了它malloc()
.
我已经尝试发送& manufacture
,只是manufacture
.我对整个内存分配很陌生。
char* manufacture = (char*)malloc(15*sizeof(char));
manufacture = "Suzuki";
free(manufacture);
尽管使用 malloc
分配内存并将此内存的地址分配给指针,但在第二个语句中覆盖此指针并让它指向字符串文本。注意:使用 manufacture = "Suzuki";
,字符串文字不会复制到您保留的内存块中;你只是让指针指向不同的东西。
您的代码实际上正在执行类似 free("Suzuki")
的事情,这显然释放了以前没有"错误定位"的东西。
写。。。
char* manufacture = (char*)malloc(15*sizeof(char));
strcpy(manufacture,"Suzuki");
...
free(manufacture);
它应该有效。
事实上,当你这样做时,你正在失去分配的内存
manufacture = "Suzuki";
这里的字符串"铃木"是一个 7 字节的区域 ( 6 + '\0' )。当你像这样分配它时,制造指向这个区域。
你可以做这样的事情
manufacture = malloc(sizeof char * 7);
if (manufacture != NULL)
{
free(manufacture);
}
(是的,malloc 可能会失败,请检查错误)
然后如果你想复制分配区域中的一些数据,你必须使用strcpy,strncpy,memcpy等功能。这里strcpy是正确的工具:
manufacture = malloc(sizeof char * 7);
if (manufacture != NULL)
{
strcpy(manufacture, "Suzuki");
free(manufacture);
}