我假设有两种数据类型,包含一个动态分配的数组,以及两个变量akt
和max
,它们表示数组中最后一个元素的位置和长度分别是数组。还应编写两个函数,以便第一个函数向数组添加新元素,如果没有足够的空间,则在双倍空间中重新分配数组。第二个函数也将新元素插入到数组中,但它重新分配了数组,这样它的大小只有一个地方大。所以我的代码是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
struct DynArray
{
int *p, max, akt = 0;
};
struct DynArrayMin
{
int *p, max, akt = 0;
};
void dyn_arr_add(struct DynArray* d, int x)
{
if ((d->akt)>(d->max) - 1)
{
d->p = (int*)realloc(d->p, (d->max) * 2);
d->max *= 2;
}
d->p[d->akt] = x;
d->akt++;
}
void dyn_arr_min_add (struct DynArrayMin* d, int x)
{
if ((d->akt)>(d->max) - 1)
{
d->p = (int*)realloc(d->p, (d->max) + 1);
d->max++;
}
d->p[d->akt] = x;
d->akt++;
}
void main()
{
DynArray d;
DynArrayMin e;
int n, l, x,aa=0;
scanf("%d", &n);
d.max = n;
d.p = (int*)malloc(sizeof(int)*n);
e.max = n;
e.p = (int*)malloc(sizeof(int)*n);
do{
printf("enter number\n");
scanf("%d", &x);
dyn_arr_add(&d, x);
dyn_arr_min_add(&e, x);
aa++;
printf("want to enter another number; 0=no\n");
scanf("%d", &l);
} while (l != 0);
for (int i = 0; i < aa;i++)
printf("%d%d\n", d.p[i], e.p[i]);
free(e.p);
free(d.p);
system("pause");
return;
}
但是从n
= 5开始,这将是动态分配的数组的初始大小,并将1到8之间的数字作为输入,我应该有这样的输出:
11
22
33
44
55
66
77
88
但我得到的是这个弹出消息this pop-up message,以及点击&#34后的以下输出;继续&#34;在弹出消息中:
11
2-842203134
-33751037-33686019
-1414791683-1414812757
-1414812757-1414812757
66
77
88
答案 0 :(得分:2)
您有malloc
个整数,但realloc
个字节数。
第一次调用realloc
会使缓冲区变小,而不是更大。