【问题标题】:Pointers to locations on the stack in c指向 c 中堆栈上位置的指针
【发布时间】:2014-11-01 13:09:54
【问题描述】:

如果一个变量是在栈上创建的,它会在创建它的函数退出时被删除。因此,可能无法从函数返回指向此类变量的指针,也不能将其传递给另一个线程(除非您确定其他线程在创建它的函数退出后不会使用它。)

将指向堆栈上某个位置的指针作为参数传递给另一个函数是否合法,如果它是另一个函数的 api 协定的一部分,它将在同一个线程中使用该指针执行所有操作?

This 不太一样;指针在原函数结束后被使用。

【问题讨论】:

  • 您应该尝试一次提出一个明确的问题。
  • 正如 juancho 所说,stackoverflow 部分是一个完全不同的问题。关注自动变量和指针位的生命周期。
  • 相应编辑。 [en.wikipedia.org/wiki/Stack_overflow](Wikipedia) 建议堆栈溢出可能会导致段错误,但不清楚是在所有情况下都是如此,还是仅在无限递归的情况下如此。

标签: c stack


【解决方案1】:

将指向堆栈上某个位置的指针作为参数传递给另一个函数是否合法,如果它是另一个函数的 api 协定的一部分,它将在同一个线程中使用该指针执行所有操作?

是 - 它仍在堆栈上,因此存在

【讨论】:

    【解决方案2】:

    C 对堆栈一无所知。

    自动变量的生命周期是直到它超出范围。范围可以小于声明它的整个函数。该对象可以在它处于活动状态时从任何函数和任何具有有效指针的线程中使用......但是当您开始谈论线程时,您还必须防止竞争条件,当多个线程同时访问相同的内存位置(并且至少有一个访问是写入)。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 2011-08-24
      • 2015-11-16
      相关资源
      最近更新 更多