释放的 C 指针没有被分配(即使我错误地分配了它,这就是这个程序所做的一切)



我正在Mac上编写一个C程序,我做了一些基本的事情,但是我得到了这个错误。我有一个带有字符指针的结构,用于保存简短描述。在我的主类中,我创建了一个指向此结构的指针,然后为结构内的 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 个字节。 1 个额外的结束 .
此外,要分配字符串,您应该使用 strcpy() .

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

你有几个错误。

  1. 在行中:

    chair->color = "blue";
    

    您正在分配chair->color以指向一些不是从malloc获得的内存。然后您稍后尝试free它。

    你需要strcpy来完成你正在尝试的事情。

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

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

    不要强制转换 malloc 的返回值。如果您这样做,则已知存在问题。请参阅我是否投射了 malloc 的结果?。

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

相关内容

  • 没有找到相关文章

最新更新