定义变量时Visual Studio堆栈溢出(C ++)

时间:2018-11-24 11:38:12

标签: visual-studio visual-c++

我一直在尝试使用c ++解决以下链接样式中的竞争问题(我尝试解决的实际问题并不公开)

http://orac.amt.edu.au/cgi-bin/train/problem.pl?set=aio18int&problemid=1032

我已经在Visual Studio中编写了一个试图解决该问题的C ++程序,但是当我运行此代码时:(有一些包含,但我无法获取格式)。

    int main() 
{
int n = 1;

freopen("pairin.txt", "r", stdin);


scanf("%d", &n);

int s[200005];
for (int i = 0; i < 2 * n; i++)
{
    scanf("%d", &s[i]);
}

int d[100005];
for (int i = 0; i < n; i++) {
    d[i] = -1;
}

for (int i = 0; i < n; i++) {
    if (d[s[i] - 1] == -1) {
        d[i] == s[i];
    }
    else {
        d[i] = i - d[i];
    }
}

int max = 0;
for (int i = 0; i < n; i++) {
    if (d[i] > max) {
        max = d[i];
    }
}

freopen("pairout.txt", "w", stdout);
printf("%d", max);

return 0;
}

它返回错误:     a.exe中0x00B11CC9的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000000,0x00402000)。发生

然后,无论出于何种原因,Visual Studio都会打开一个名为chkstk.asm的asm文件的标签。

我知道何时正常发生此错误,但似乎触发该错误的原因是定义“ int n = 1;”。当我逐步使用调试器时,这绝对让我感到困惑。我要做的就是调试算法,而不是尝试获取int n = 1;工作。

我正在使用启用了_CRT_SECURE_NO_WARNINGS标志的Visual Studio 2017。

我在在线IDE中对此进行了尝试(注释掉了所有IO行),并且main()返回0很好。

1 个答案:

答案 0 :(得分:1)

问题的原因在于sd数组定义中。这些变量在堆栈上分配。占用空间超过1Mb,但Visual Studio中的默认堆栈大小为1Mb

  

/ F 设置程序堆栈大小(以字节为单位)。如果没有此选项,则堆栈大小默认为1 MB。

因此,您的堆栈空间不足。

要解决此问题,您应该增加stack size或在堆上分配内存或减小数组大小(例如int s[100000];int d[50000];)。