在我从前辈那里继承的程序中,有以下格式的函数:
somefunc(some_type some_parameter, char ** msg)
换句话说,最后一个参数是 a char **
,用于返回消息。即:somefunc()
会“变” msg
。在某些情况下,所讨论的变化是以下形式:
sprintf(txt,"some text. Not fixed but with a format and variables etc");
LogWar("%s",txt); //call to some logging function that uses txt
*msg = strdup(txt);
我知道每次调用都strdup()
应该有一个相关的调用free()
来释放它分配的内存。
由于该内存用于返回某些内容,因此显然不应在somefunc()
.
但然后在哪里?
如果使用相同somefunc()
的消息多次调用,那么该指针将四处移动,我想。那么之前调用分配的空间会丢失,对吧?
我当然应该在程序结束之前的某个地方free(*msg)
。(在这种情况下*msg
,是在调用中用作参数的版本somefunc()
。)但我认为该调用只会释放最后分配的内存,而不是在早期调用中分配的内存somefunc()
,对吧?
那么,我是否正确地说somefunc()
应该如下所示:
sprintf(txt,"some text. Not fixed like here, but actually with variables etc");
LogWar("%s",txt); //call to some logging function that uses txt
free(*msg); //free up the memory that was previously assigned to msg, since we will be re-allocating it immediatly hereafter
*msg = strdup(txt);
所以用free()
之前的strdup()
.
我对么?