我写了一个有菜单的程序。首先是将表空间加倍,其次将表空间减半,以此类推。这是我的代码:
#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)