繁体   English   中英

没有分配正在释放的C指针(即使我malloc了它,这也是该程序所做的全部)

[英]C pointer being freed was not allocated (even though I malloc'd it, and that's all this program does)

我在Mac上编写了C程序,做了一些基本的操作,但是出现了这个错误。 我有一个带有char指针的结构,用于保存简短说明。 在我的主类中,我创建了一个指向该结构的指针,然后再指向该结构内的char指针。 当我在结构中释放char指针时,我的终端抛出了一些错误消息,关于未分配的指针正在释放。 如果我注释掉该行,则不会出现该错误,因此,我很确定这是该行。 我将包括导致这个奇怪问题的代码。

Chair *chair = (Chair*)malloc(sizeof(Chair));
chair->color = (char*)malloc(sizeof(char)*4);
chair->color = "blue";
printf("This chair is %s", chair->color);
free(chair->color);
free(chair);
return 0;

当我搜索此内容时,总是会遇到未分配内存或“双重释放错误”的用户错误。 我很确定我使用了malloc,在这6行中没有明显的问题。

chair->color = (char*)malloc(sizeof(char)*4);
chair->color = "blue";

要存储4个字符的字符串,您需要5个字节。 结尾\\0额外增加1个。
另外,要分配字符串,应使用strcpy()

strcpy(chair->color, "blue");

您有几个错误。

  1. 在该行中:

     chair->color = "blue"; 

    您正在分配chair->color来指向您不是从malloc获得的malloc 然后,您尝试稍后将其free

    您将需要strcpy来完成您要尝试的工作。

     strcpy(chair->color, "blue"); 
  2. 为了复制"blue" ,您必须具有至少包含5个字符的字符串-字母4个,终止空字符1个。 您需要使用:

     chair->color = malloc(N); // Where N > 4. 

    不要转换malloc的返回值。 如果这样做的话,这是有问题的。 请参见是否强制转换malloc的结果?

    您也不需要使用sizeof(char) 保证为1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM