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

时间:2019-01-08 22:16:57

标签: c malloc dynamic-memory-allocation

我正在尝试释放通过malloc函数分配的空间,但是每次收到此消息时:

  

“ malloc:对象0x7ffeefbff510的错误:指针被释放为   未分配”

即使我清楚地为它分配了malloc()

我已经尝试发送& manufacture和仅发送manufacture。我对整个内存分配还很陌生。

char* manufacture = (char*)malloc(15*sizeof(char));   
manufacture = "Suzuki"; 

free(manufacture);

2 个答案:

答案 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);
}