C语言 如何修复未分配释放的指针



我正在尝试释放我使用 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);
}

最新更新