有人可以告诉我为什么我会收到此错误吗?

时间:2020-05-20 20:57:23

标签: c realloc

我写了一个有菜单的程序。首先是将表空间加倍,其次将表空间减半,以此类推。这是我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    void double_space(int *table, int *n);
    void half_space(int *table, int *n);
    void fill(int *table, int n, int start, int finish);

    void main()
    {
        int N = 4;
        int *t;
        int i, choice;

        t = (int *)malloc(N*sizeof(int));
        if(t == NULL)
        {
            printf("Unable to allocate memory...");
            exit(0);
        }

        for (i=0; i<N; i++)
        {
            t[i] = i;
        }

        while (1)
        {
            printf("\tMENU\n");
            printf("1) Double the size of table\n");
            printf("2) Minimize the size of table\n");
            printf("3) Print table\n");
            printf("4) Exit the program\n");
            printf("Choose one of the above: ");
            scanf("%d", &choice);

            switch (choice)
            {
            case 1:
                double_space(t, &N);
                fill(t, N, N/2, N-1);
                printf("\nTable is double in size");
                break;
            case 2:
                half_space(t, &N);
                fill(t, N, N/2, N-1);
                printf("\nTable is half in size");
                break;
            case 3:
                for (i=0; i<N; i++)
                {
                    printf("%d ", t[i]);
                }
                printf("\n");
                break;
            case 4:
                exit(0);
            default:
                printf("Invalid choice...");
                break;
            }
        }
    }
    void double_space(int *table, int *n)
    {
        *n = (*n)*2;

        table = (int *)realloc(table, *n);
        if(table == NULL)
        {
            printf("Unable to allocate memory...");
            exit(0);
        }
    }
    void half_space(int *table, int *n)
    {
        *n = (*n) / 2;

        table = (int *)realloc(table, *n);
        if(table == NULL)
        {
            printf("Error allocating memory...");
            exit(0);
        }

    }

    void fill(int *table, int  n, int start, int finish)
    {
        int i;

        if(start>=0 && start<=finish && finish<=n-1)
        {
            srand(time(NULL));

            for (i=start; i<=finish; i++)
            {
                table[i] = rand() % 100;
            }
        }

    }

选择“第一”选项然后选择“第三”选项以打印表格后,它将打印尺寸加倍的表格。然后,当我再次选择第一个选择时,它将输出此错误:

    realloc(): invalid next size
    Aborted (core dumped)

0 个答案:

没有答案