我在我的函数中使用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);
答案 0 :(得分:0)
如果必须返回该内存,那么free
函数内部的内存怎么可能?
有两种方法可以解决这个问题:
malloc
和free
来电。顺便说一句,如果state
不等于1
,您问题中显示的函数将导致undefined behavior,之后您尝试free
返回的指针(时间和地点无关紧要)。原因是您返回一个指向字符串文字的指针,而这些指针尚未由malloc
分配,并且无法传递给free
。
如果 state
不等于1
,那么你也会有内存泄漏,因为你分配了内存但是没有返回指针,所以指针失去了。