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语言中,使用freestrdup放入动态分配的缓冲区中。

在C ++中,请忘记此内容并切换到abcdefghi

关于c - 如何在结构中释放char *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43762789/

10-11 22:44
查看更多