malloc和C函数中的自由指针

时间:2014-05-14 08:18:33

标签: c function pointers malloc free

我在我的函数中使用malloc然后返回指针。我需要在哪里用函数free(ret_str)释放内存?在function_name()方法内或外面?怎么做?

功能:

char* function_name(void)
{
  int state = 3;                                                                
  //char *ret_str = malloc(40 * sizeof(char));
  Send("string");
  state = wait_response();
  if(state == 1)
  {
    char *ret_str = malloc(40 * sizeof(char));
    strcpy(ret_str, rx_buffer+(strcspn(rx_buffer, "?")+5));
    strncpy(ret_str+strcspn(ret_str, "\r"), " ", 1);
    strncpy(ret_str+strcspn(ret_str, "\n"), ret_str+strcspn(ret_str, "\n")+3, 2);
    ret_str[strcspn(ret_str, "\n")] = '\0';
    empty_buffer(p_rx_buffer);  
    return ret_str;
  }
  else
  {
    empty_buffer(p_rx_buffer);          
    return "D_ERROR";
  } 
}

函数调用:

char *current_setting;
current_setting = function_name();
free(current_setting);

1 个答案:

答案 0 :(得分:0)

如果必须返回该内存,那么free函数内部的内存怎么可能?

有两种方法可以解决这个问题:

  1. 有两个功能:一个用于分配,一个用于免费,模仿mallocfree来电。
  2. 有一个分配的功能,但让呼叫者可以自由使用。

  3. 顺便说一句,如果state不等于1,您问题中显示的函数将导致undefined behavior,之后您尝试free返回的指针(时间和地点无关紧要)。原因是您返回一个指向字符串文字的指针,而这些指针尚未由malloc分配,并且无法传递给free

    如果state不等于1,那么你也会有内存泄漏,因为你分配了内存但是没有返回指针,所以指针失去了。