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

Functions and Pointer help: Program builds but Crashes without any specific errors

本文关键字:任何特 错误 崩溃 帮助 指针 程序生成 函数      更新时间:2023-10-16

我正在做一个硬件作业,我一直遇到崩溃,但我没有得到任何错误它只是崩溃。我创建了 2 个函数来尝试计算最大值、最小值和平均值,创建了 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;
}

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

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

。当i在第一个循环通道上为零时(因此您除以零(。 该除法实际上应该循环之后完成,在所有值都相加之后(并且将始终是除以 3(。

该行:

         int min = value[0];

也应该移动到循环之前; 事实上,您在每次循环传递时重置min的值,因此您实际上最终得到的最后一个值小于 value[0] ,如果有的话......如果没有,你根本不会改变ans[3]。 反正ans[3]应该ans[2]... ans[3] 是越界的(将是第 4 个元素(。

相关文章: