我正在尝试释放通过malloc
函数分配的空间,但是每次收到此消息时:
“ malloc:对象0x7ffeefbff510的错误:指针被释放为 未分配”
即使我清楚地为它分配了malloc()
。
我已经尝试发送& manufacture
和仅发送manufacture
。我对整个内存分配还很陌生。
char* manufacture = (char*)malloc(15*sizeof(char));
manufacture = "Suzuki";
free(manufacture);
答案 0 :(得分:4)
尽管您使用malloc
分配了内存,并将该内存的地址分配给了指针,但是您在第二条语句中覆盖了该指针,并使其指向字符串文字。注意:对于manufacture = "Suzuki";
,字符串文字被 not 复制到您保留的存储块中;您只需让指针指向其他内容即可。
您的代码实际上正在执行类似free("Suzuki")
的操作,这显然释放了以前未“分配”的内容。
写...
char* manufacture = (char*)malloc(15*sizeof(char));
strcpy(manufacture,"Suzuki");
...
free(manufacture);
它应该可以工作。
答案 1 :(得分:1)
实际上,您在执行操作时会丢失分配的内存
manufacture = "Suzuki";
您的字符串“ 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);
}