【发布时间】:2015-01-05 05:45:48
【问题描述】:
在 C++ 中执行goto 语句时,下面代码片段中的两个数组是否从堆栈中移除?或者当方法返回时它们会从堆栈中移除?
retrySplit:
...
uint32_t primsAbove[primitives.size()];
uint32_t primsBelow[primitives.size()];
...
goto retrySplit;
这个问题与使用 goto 语句导致的泄漏无关,而是与您是否会炸毁堆栈的可能性有关。
【问题讨论】:
-
从概念上讲,它们在退出块时会被删除(即在右括号
}...) -
你不应该关心堆栈指针。这些局部变量的位置可能会在退出块后被重用。
-
需要注意的是,除非
primitives.size()是一个常量表达式,否则这段代码是不标准的,因为它使用了VLA。
标签: c++ stack-overflow goto destroy callstack