c++ - C++中goto语句对栈的影响

标签 c++ stack-overflow goto destroy callstack

在C++中执行goto语句时,下面代码片段中的两个数组是否从栈中移除?还是在方法返回时将它们从堆栈中移除?

retrySplit:
    ...
    uint32_t primsAbove[primitives.size()];
    uint32_t primsBelow[primitives.size()];
    ...
    goto retrySplit;

这个问题与使用 goto 语句导致的泄漏无关,而是与您是否可以炸毁堆栈的可能性有关。

最佳答案

这个程序:

#include <iostream>

class X {
public:
 X() { std::cout << "ctor" << std::endl; }
 ~X() { std::cout << "dtor" << std::endl; }
};

int main(int argc, char** argv) {
 int i = 0;

label:
 X a;

 if (i == 0) {
  i = 1;
  goto label;
 }

 return 0;
}

产生这个输出:

$ ./a.out 
ctor
dtor
ctor
dtor

关于c++ - C++中goto语句对栈的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26818106/

相关文章:

c++ - 如何解决由于参数中的默认构造函数导致的函数重载不明确

java - 与异常处理相关的查询

java - 为什么在使用泰勒级数展开计算 pi 时给出 java.lang.StackOverflowError ?

matlab - 在 MATLAB 中转到?

c++ - Rcpp 找不到 gsl 库

c++ - 使用指针遍历多维数组

c++ - QT:如何根据 SpinBox 的值提高/降低标签的值

c - 使用字符串的基于堆栈的缓冲区溢出异常

c - 使用 'goto' 的流量控制宏

c++ - goto语句在C++中的用法