如何在结构中释放char*?

Adi*_*rel -2 c free pointers

 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| }
Run Code Online (Sandbox Code Playgroud)

根据Valgrind的说法,第10行有泄漏,这意味着免费(xyz-> abc)不起作用.我怎么能解脱这个?

Lig*_*ica 7

你分配了10个字节,并存储了一个指向那些bytes(xyz->abc)的指针,然后你立即用指向字符串文字("abcdefghi\0")的指针替换了该指针.

您的计划有几个问题:

  1. 十个泄漏的字节
  2. \0字符串文字过多- 为什么?
  3. free- 你没有的东西malloc(被替换的指针)
  4. 首先使用malloc/ free(假设标签不是假的)

在C语言中,使用strdup到布设abcdefghi到您的动态分配的缓冲区.

在C++中,忘记这一点并切换到std::string.