gpt4 book ai didi

c - C 中的内存(数组结构)

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:52 25 4
gpt4 key购买 nike

我有结构的动态数组。

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;
};

我需要从数组中添加、删除元素。

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

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

我制作了 func addNewPacient 和 deleteLastElement。

 void addNewPacient() {
count++;
pacients = (Pacient*)realloc(pacients, sizeof(Pacient)*count );
......//many scanf...
}
void removeLastElement() {
count--;
pacients = (Pacient*)realloc(pacients, count * sizeof(Pacient*));
}

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

在我可以调用方法 addNewPacient() (Nazar) 之后,一切都会好起来的。 {Ivan ....., Peto ...., Grisha ...., Nazar....}但是当我从数组中删除最后一个元素时,几乎一切都会好起来的。{Ivan ......, Petro ......, Grisdksaldaskfpwqe###221 ......}倒数第二个元素扭曲。我想我对 deleteLastElement() 有疑问,请帮忙)

最佳答案

你是对的:你的列表收缩代码有问题:

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

您传递的是指针 的大小,而不是结构 的大小。你在生长功能方面做得很好。传递结构的实际大小,否则可使用的内存将大大减少,这就解释了被丢弃的末端元素。

既然我指出了这一点,修复就很简单了:只需复制上面的行(应该首先这样做或者做一个宏来避免复制/粘贴):

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

关于c - C 中的内存(数组结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42286012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com