我遇到这样的错误:运行时检查失败#2 - 堆叠变量' numb'被腐败了。 它出现在这种功能的最后一个部分:
int problem20()
{
int res = 0, i;
int numb[160];
for(i = 0; i < 160; i++)
numb[i] = 0;
numb[0] = 1;
for(i = 1; i < 100; i++)
{
multiply(numb, i, numb, 160);
}
for(i = 0; i < 160; i++)
res += numb[i];
return res;
}
编辑:
void multiply(int* a1, int a2, int* res, int l)
{
int temp, i, m = a2, k;
for(k = 0; m > 0; k++)
m /= 10;
int *result = new int[l + k];
for(i = 0, temp = 0; i < l; i++)
{
result[i] = a1[i] * a2 + temp;
temp = result[i] / 10;
result[i] %= 10;
}
for(i = l; i < l + k; i++)
{
result[i] = temp % 10;
temp /= 10;
}
memcpy(res, result, sizeof(int) * (l + k));
delete[] result;
}
函数miltiply只是乘以i麻木并将结果给第三个参数。这个功能还可以,之前已经过测试。
答案 0 :(得分:1)
你的问题是你传递麻木作为乘法函数的res参数。 multiply函数创建一个大小为l + k的数组,然后尝试将其复制到大小为l的numb数组,这意味着你将超出numb数组的范围,从而触发此问题。
我建议将int *参数转换为对std :: vector的引用,以避免需要手动分配临时数组。