在结构

时间:2017-11-26 00:47:01

标签: c pointers struct malloc dynamic-arrays

我假设有两种数据类型,包含一个动态分配的数组,以及两个变量aktmax,它们表示数组中最后一个元素的位置和长度分别是数组。还应编写两个函数,以便第一个函数向数组添加新元素,如果没有足够的空间,则在双倍空间中重新分配数组。第二个函数也将新元素插入到数组中,但它重新分配了数组,这样它的大小只有一个地方大。所以我的代码是这样的:

#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

1 个答案:

答案 0 :(得分:2)

您有malloc个整数,但realloc个字节数。

第一次调用realloc会使缓冲区变小,而不是更大。