[英]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");
您有几个错误。
在该行中:
chair->color = "blue";
您正在分配chair->color
来指向您不是从malloc
获得的malloc
。 然后,您尝试稍后将其free
。
您将需要strcpy
来完成您要尝试的工作。
strcpy(chair->color, "blue");
为了复制"blue"
,您必须具有至少包含5个字符的字符串-字母4个,终止空字符1个。 您需要使用:
chair->color = malloc(N); // Where N > 4.
不要转换malloc
的返回值。 如果这样做的话,这是有问题的。 请参见是否强制转换malloc的结果? 。
您也不需要使用sizeof(char)
。 保证为1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.