【问题标题】:Malloc call as a function argumentMalloc 调用作为函数参数
【发布时间】:2014-06-06 10:16:48
【问题描述】:

我的程序中有以下功能:

char *strconcat(char *str1, char *str2);

此函数执行 malloc 调用以分配两个字符串的连接。

因此,该字符串将用于这样的函数中:

void myFunction(char *inputstr);

一般情况下,我使用如下函数:

mystring = strconcat(mystr1, mystr2);
myFunction(mystring);

是否可以像这样执行调用?

myFunction(strconcat(mystr1, mystr2));

在此调用之前分配的内存是否已释放或内存湖?使用这样的函数,我没有对分配的内存的任何引用,所以我不能使用 free。

提前谢谢你。

亚历克斯

【问题讨论】:

  • 你在哪里打电话free?如果答案是“无处”,则说明内存泄漏。
  • 是的,但不要忘记 free(inputstr);在我的函数中
  • @Manül 是的,这可行,但我认为这不是很好的设计而且非常脆弱。
  • @larsmans,在第二次通话中,我不会在任何地方免费通话。这是我的问题,¿即使我没有引用此内存区域的指针,是否存在内存泄漏?答案似乎是肯定的
  • @alexag:这几乎就是内存泄漏的定义

标签: c malloc free


【解决方案1】:

可以这样调用吗?

myFunction(strconcat(mystr1, mystr2));   

是的,你可以。函数参数应该是一个表达式,并且在传递给(复制到)函数参数之前评估该表达式。因此strconcat(mystr1, mystr2) 将被评估,返回的结果将被复制到函数myFunction 的参数中。您必须在函数中释放内存以避免内存泄漏。

【讨论】:

  • 谢谢,我就是这么想的。问题是我无法在myFunction 中释放内存,因为在其他情况下需要在函数调用之后使用myString。所以我想我必须使用第一个选项中的函数来引用内存区域并在myFunction之外释放它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2013-07-20
  • 2015-07-12
  • 2016-06-09
  • 2019-11-30
相关资源
最近更新 更多