c - C 函数中的 malloc 和自由指针

标签 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. 有两个函数:一个用于分配,一个用于释放,模仿 mallocfree 调用。
  2. 有一个分配函数,但将其留给调用者释放。

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

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

关于c - C 函数中的 malloc 和自由指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23649183/

相关文章:

c - 在C中为结构中的数组分配顺序内存地址

c - 关于 C 中 unsigned char * 的奇怪问题

php - 在函数中返回 parent::function

c - 如何将结构传递给函数

c - 二维指针数组的内存分配

c++ - 初始化后将指针设为const

c - C++ 中的 EOF 函数 |c

c - 在C中切换变量的值

java - 如何使用Java 8的函数引用?

c++ - 指针包含什么类型的数据