【问题标题】:malloc and free pointer in C functions [duplicate]C函数中的malloc和free指针[重复]
【发布时间】:2014-05-14 08:18:33
【问题描述】:

我在函数中使用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);

【问题讨论】:

  • 这一切都取决于你的对象的生命周期。
  • 在输入if 语句后执行malloc 否则会出现内存泄漏。

标签: c function pointers malloc free


【解决方案1】:

当函数必须返回该内存时,如何free 函数内部的内存?

有两种处理方式:

  1. 有两个功能:一个分配,一个释放,模仿mallocfree 调用。
  2. 有一个分配函数,但将其留给调用者释放。

顺便说一句,如果state 不等于1 并且您稍后尝试free 返回的指针(何时何地无关紧要),则问题中显示的函数将导致undefined behavior )。原因是你返回了一个指向字符串字面量的指针,而这些指针还没有被malloc 分配,也不能传递给free

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

【讨论】:

  • 我更改了 malloc 并在我的问题中添加了免费功能。请你看看它,看看这是否更好?
  • @user3635703 所以你决定在我的列表中使用解决方案 2。这将起作用,如果 且仅当 wait_response 在函数内返回 1
猜你喜欢
  • 2018-08-16
  • 2015-12-27
  • 2021-03-28
  • 2011-06-25
  • 2014-11-06
  • 2019-03-29
  • 2016-03-28
  • 2016-07-30
  • 2021-12-11
相关资源
最近更新 更多