【问题标题】:Why should a function not return a local array? [duplicate]为什么函数不应该返回本地数组? [复制]
【发布时间】:2013-05-21 21:50:31
【问题描述】:
char* f()
{
char s[100];
//....function body code
return s;
}

为什么不能这样写?

【问题讨论】:

  • 因为程序跑了!
  • 有人请找出骗子。
  • 嘿!让我们有礼貌,现在。
  • 当您调用一个函数时,在该函数“内部”声明的所有变量都会在调用该函数时分配的一块“堆栈”存储空间中创建。当您返回时,该存储被释放,以供其他功能重用。要理解的另一件事是,在 C 中,数组是二等公民,因此您的 return s 只会返回一个指向数组 s 的 指针。 s 的实际存储仍然分配在“堆栈框架”中......直到您返回,此时它会“噗”地一声。

标签: c function


【解决方案1】:

s是只存在于函数内部的局部变量。

一旦函数退出,s 将不复存在,其内存将重新分配给程序的其他部分。

因此,您的函数返回一个指向随机无意义内存块的指针。

【讨论】:

  • "s is a local variable" - 更准确地说,s 是一个具有自动存储持续时间的块范围对象,因此在其封闭块(函数体)之外使用它会调用未定义的行为。
  • @imre:这是内存泄漏。
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 2017-06-16
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2019-07-08
相关资源
最近更新 更多