我有动态的结构数组。
%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)
的问题答案 0 :(得分:2)
你是对的:你的列表缩小代码存在问题:
pacients = (Pacient*)realloc(pacients, count * sizeof(Pacient*));
您传递的指针的大小不是结构的大小。你的成长功能很好。通过结构的实际大小,或者你可以使用更少的内存,这解释了已删除的结束元素。
现在我指出了这一点,修复很简单:只需复制上面的行(应该首先完成该操作或完成宏以避免复制/粘贴):
pacients = realloc(pacients, count * sizeof(Pacient));