1| typedef struct container{
2| char* abc;
3| }container;
4|
5|
6| int main(void){
7|
8| container* xyz = malloc(sizeof(container));
9|
10| xyz->abc = malloc(10);
11| xyz->abc = "abcdefghi\0";
12|
13| free(xyz->abc);
14| free(xyz);
15| }
根据Valgrind的说法,第10行存在泄漏,这意味着free(xyz-> abc)无法正常工作。我该如何释放它?
最佳答案
您分配了10个字节,并存储了指向这些字节(xyz->abc
)的指针,然后立即用指向字符串文字("abcdefghi\0"
)的指针替换了该指针。
您的程序存在几个问题:
十个泄漏的字节
字符串文字中的\0
过多-为什么?free
-输入您不曾使用的内容(替换后的指针)
首先使用malloc
/ malloc
(假设c++标签不是虚假的)
在C语言中,使用free
将strdup
放入动态分配的缓冲区中。
在C ++中,请忘记此内容并切换到abcdefghi
。
关于c - 如何在结构中释放char *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43762789/