运行时检查失败#2

时间:2014-05-27 18:43:53

标签: c++

我遇到这样的错误:运行时检查失败#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麻木并将结果给第三个参数。这个功能还可以,之前已经过测试。

1 个答案:

答案 0 :(得分:1)

你的问题是你传递麻木作为乘法函数的res参数。 multiply函数创建一个大小为l + k的数组,然后尝试将其复制到大小为l的numb数组,这意味着你将超出numb数组的范围,从而触发此问题。

我建议将int *参数转换为对std :: vector的引用,以避免需要手动分配临时数组。