当我使用free()时C中的程序随机崩溃

时间:2017-11-27 01:18:04

标签: c arrays pointers

该程序应该允许用户输入任意数量的变量(存储在数组中)。一旦用户输入" -999",程序将停止填充数组,找到数组中的最大数字并结束。但是,当我在程序中输入一些测试数字时,它会有时成功结束,但有时它会决定崩溃。

例如,我可以输入:

100 (return) 200 (return) 300 (return) 400 (return) -999 (return)

它会崩溃。

然后我输入:

10 (return) 20 (return) 30 (return) 40 (return) -999 (return) 

它将成功运行。然后,如果我键入我最初键入的内容,它将起作用并且不会崩溃。我甚至会重复这个测试,它不会复制相同的结果。

我完全感到困惑和迷失,任何帮助都会受到赞赏。

#include <stdio.h>

void fillArray(int *a);
int largestElement(int *a);

int i = 0;

int main()
{
    int *array = (int *)malloc(sizeof(int));

    fillArray(array);

    printf("The largest element in 'array' is: %d\n", largestElement(array));

    //Program randomly crashes right here sometimes, not sure why.
    printf("Right before free function...\n");
    free(array);
    printf("Successfully freed!\n");

    return 0;
}

void fillArray (int *a)
{
    int userInput = 0;
    printf("Type in a list of numbers terminated by a -999:\n");

    while(userInput != -999)
    {
        //*a = realloc(a, (i+1) * sizeof(int));

        scanf("%d", &userInput);
        a[i] = userInput;
        i++;
    }
}

int largestElement(int *a)
{
    int j;
    int largest = a[0];

    for(j = 0; j < i; j++){
        if(a[j] > largest){
            largest = a[j];
        }
    }
    return largest;
}

0 个答案:

没有答案