C中的内存(数组结构)

时间:2017-02-16 22:37:39

标签: c memory realloc calloc

我有动态的结构数组。

%26

我需要添加,删除数组中的元素。

struct Pacient
{
    char name[30];
    char surname[30];
    char middleName[30];
    char nationality[30];
    float height;
    float weight;
    char phone[30];
    struct Date  {
        int day;
        int month;
        int year;
    }dateOfBirth;
    struct Adress {
        char city[30];
        char street[30];
        int numberOfHouse;
    } adress;
    struct Hospital {
        int numberOfHospital;
        char nameOfOffice[30];
        int numberOfMedicalCart;
        char groupOfBlood[10];
        char nameOfDiagnosis[30];
    }hospitalInfo;
};

^我的数组声明,count - 数组的大小。

我制作了func addNewPacient和deleteLastElement。

Pacient* pacients;
pacients = (Pacient*)calloc(count, sizeof(Pacient));

首先,我输入有关(示例)3个用户的信息。 Ivan,Petro和Grisha。 我调用方法printAll(),一切都很好。 {Ivan .....,Peto ....,Grisha ....}

在我可以调用方法addNewPacient()(Nazar)之后,一切都会好起来的。 {Ivan .....,Peto ....,Grisha ....,Nazar ....} 但是当我从数组中删除最后一个元素时,几乎都会很好。 {Ivan ......,Petro .....,Grisdksaldaskfpwqe ### 221 ......} Penult元素扭曲了。 我认为我有deleteLastElement(),帮助PLZ)

的问题

1 个答案:

答案 0 :(得分:2)

你是对的:你的列表缩小代码存在问题:

pacients = (Pacient*)realloc(pacients, count * sizeof(Pacient*));

您传递的指针的大小不是结构的大小。你的成长功能很好。通过结构的实际大小,或者你可以使用更少的内存,这解释了已删除的结束元素。

现在我指出了这一点,修复很简单:只需复制上面的行(应该首先完成该操作或完成宏以避免复制/粘贴):

pacients = realloc(pacients, count * sizeof(Pacient));