被释放的C指针未被分配(即使我将其malloc';d,这就是这个程序所做的一切)
我在我的mac上写了一个C程序,我做了一些基本的东西,但是我犯了这个错误。我有一个结构,里面有一个字符指针,用来保存简短的描述。在我的主类中,我创建了一个指向该结构的指针,然后在该结构中创建了另一个用于char指针的指针。当我释放结构中的char指针时,我的终端抛出一些错误消息,关于释放了一个未分配的指针。如果我把那一行注释掉,错误就不存在了,所以我很确定那是那一行。我将包括导致此奇怪问题的代码被释放的C指针未被分配(即使我将其malloc';d,这就是这个程序所做的一切),c,pointers,struct,malloc,C,Pointers,Struct,Malloc,我在我的mac上写了一个C程序,我做了一些基本的东西,但是我犯了这个错误。我有一个结构,里面有一个字符指针,用来保存简短的描述。在我的主类中,我创建了一个指向该结构的指针,然后在该结构中创建了另一个用于char指针的指针。当我释放结构中的char指针时,我的终端抛出一些错误消息,关于释放了一个未分配的指针。如果我把那一行注释掉,错误就不存在了,所以我很确定那是那一行。我将包括导致此奇怪问题的代码 Chair *chair = (Chair*)malloc(sizeof(Chair)); chai
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;
当我搜索这个时,总是出现用户错误,比如不使用mallocing或者“双重自由错误”。我非常确定我使用了malloc,并且在这6行代码中没有明显的问题
chair->color = (char*)malloc(sizeof(char)*4);
chair->color = "blue";
要存储4个字符的字符串,需要5个字节。结尾部分额外增加1个\0
另外,要分配字符串,应该使用
strcpy()
你有几个错误
chair->color = "blue";
您正在分配chair->color
以指向您没有从malloc
获得的某些内存。然后,您将尝试稍后释放它
您需要strcpy
来完成您正在尝试的内容
strcpy(chair->color, "blue");
“blue”
,您必须有一个至少包含5个字符的字符串-4个字母和1个终止空字符。您需要使用:
chair->color = malloc(N); // Where N > 4.
不要强制转换malloc
的返回值。如果你这样做,就会有问题。看
您也不需要使用sizeof(char)
。它保证为1chair->color=“蓝色”代码>:chair->color
按字符串文本的地址重写。(这不是malloc的地址)。我还注意到我甚至不需要malloc“字符串”。我的例子非常简单,以至于我忘记了基本的。。。我可以使用char*string=“some text”;我想我刚刚意识到这个问题。我来自C++环境,如果没有被抛出,MALOC总是给出一个空指针错误。椅子->颜色=“蓝色”;在这种环境下也是可行的。我写的C++比我意识到的多。谢谢你把它清理干净!我很高兴能帮上忙。
chair->color = malloc(N); // Where N > 4.