gpt4 book ai didi

调用函数两次后 C++ .exe "has stopped working"

转载 作者:行者123 更新时间:2023-12-03 07:47:56 27 4
gpt4 key购买 nike

所以我有一个 C++ 程序,它调用一个函数三次,我正在使用 Code::Blocks 制作这个项目,当我运行 .exe 的发行版本时,它告诉我该程序已停止工作,并且我必须关闭该程序。我尝试只调用该函数一次,无论我离开哪个调用,它都会起作用。所以看起来只有当它被调用两次时才会崩溃,无论我传递哪些变量。知道为什么会发生这种情况吗?这是我调用的函数:

int interval(int h, int i, std::vector< std::vector<int> >& Array, int arr[], int interv)
{
int k = i + 1;
int P[20];
int number;
bool a;
int b;
int N;
int maxres;
int result[90];

for (h = 0; h < 20; h++)
{
for (N = 1; N <= 90; N += 1)
{
result[N] = 0;
for (i = 1; i <= (k - interv); i++)
{
number = Array[i - 1][h] - N;
if (number <= 0)
number += 90;
for (b = 0; b < 20; b++)
{
a = false;
if ((number == Array[i][b]) || ( (interv == 1) && (number == Array[i + 1][b]) ) || ( (interv == 2) && (number == Array[i + 2][b]) ) )
{
a = true;
result[N]++;
break;
}
}
if (!a)
break;
}
if (N == 1)
maxres = N;
else
{
if (result[N] >= result[maxres])
maxres = N;
}
}
P[h] = maxres;
}

for (h = 0; h < 20; h++)
{
arr[h] = Array[0][h] + P[h];
if ( arr[h] > 90 )
arr[h] -= 90;
}
return 0;
}

以下是调用:

int c[20];
int e[20];
int d[20];

interval(h, i, Array, c, 0);
interval(h, i, Array, e, 1);
interval(h, i, Array, d, 2);

最佳答案

一个问题是对结果的越界访问:

int result[90];

for (h = 0; h < 20; h++)
{
for (N = 1; N <= 90; N += 1) <--- Here!
{
result[N] = 0;

N 允许的值为 0 到 89(如 for (N = 0; N != 90;++N))

这里可能有类似的问题

        for (i = 1; i <= (k - interv); i++)

但我不能确定。

关于调用函数两次后 C++ .exe "has stopped working",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32244944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com