函数和指针帮助:程序构建但崩溃没有任何特定错误

时间:2018-04-07 19:15:37

标签: c++ c

我正在进行一项新工作,我一直在崩溃,但我没有收到任何错误它只是崩溃了。我创建了2个函数来尝试计算max,min和avg以及1来生成3个随机数并将其发送回main。我的函数中的所有值都需要作为指针返回。感谢先进的帮助!

int * random_number()
{
     static int num[3];
     for(int i = 0; i < 3; i++){

         num[i] = (10 + rand() % 90);
     }
     return num;
}

int * calculate(int *value)
{
    static int ans[3];
    int max = 0;
    for (int i = 0; i < 3; i++)
    {
        ans[0] += value[i];
        ans[0] = ans[0] / i;
        if (value[i] > max)
        {
            ans[2] = max;
        }
        int min = value[0];
        if (value[i] < min)
        {
            ans[3] = min;
        }
    }
    return ans;

}



int main() {

    srand(time(NULL));
    int cnt = 0;
    int *result;
    int *find;

    do{
        result = random_number();
        find = calculate(result);
        cnt++;
    }


    while(cnt < 10);
        if (cnt == 10){
            printf("Result is %i, %i, %i.", result[0],result[1],result[2]);
            printf("The avg is %i. The max is %i and the min is %i.", find[0], find[1], find[2]);

            printf("Worked \n");
        }
        else
            printf("Didn't work");


    return 0;
}

1 个答案:

答案 0 :(得分:1)

你的calculate()函数有很多错误 - 主要是你试图在for循环中做一些应该在它之外完成的事情。你得到的崩溃来自以下几行:

        ans[0] = ans[0] / i;

...第一次循环传递时i为零(所以你除以零)。在添加了所有值之后,循环之后实际上应该完成该分割(并且总是除以3)。

该行:

         int min = value[0];

也应该在循环之前移动;事实上,你是在每次循环传递时重置min的值,所以你实际上最终得到的 last 值小于value[0],如果有的话是一个......如果没有,你就不会改变ans[3]ans[3]实际上应该是ans[2] ... ans[3]超出范围(将是第4个元素)。