我的代码包含来自struct BeforeTriag类型的Patient**
以下是结构和字段:

typedef struct{
char Id[ID_SIZE];
char Name[NAME_SIZE];
char LastName[NAME_SIZE];
char PhoneNum[PHONE_SIZE];
STATUS Status;
char Address[ADDRESS_SIZE];
}Patient;

以下是我的初始化和分配:
Patient** BeforeTriag = NULL;
int* BeforeTriagSize[1] = { 0 };

BeforeTriag = (Patient**)malloc(sizeof(Patient*));
if (!(BeforeTriag))
{
    printf("ERROR!Out of memory!");
    exit(1);
}

*BeforeTriag = (Patient*)malloc((PatientArraySize)* sizeof(Patient));
if (!(*BeforeTriag)){
    printf("ERROR!Out of memory!");
    exit(1);
}

在这里,我试图释放结构中的每个字段:
    for (i = 0; i < (*BeforeTriagSize); i++){
    free((BeforeTriag)[i]->Id);
    free((BeforeTriag)[i]->Name);
    free((BeforeTriag)[i]->LastName);
    free((BeforeTriag)[i]->Address);
    free((BeforeTriag)[i]->PhoneNum);
    }

    free(BeforeTriag);

当我调试它时,它压碎了空闲id的第一行:
free((BeforeTriag)[i]->Id);
我该怎么做才能自由呢?

最佳答案

BeforeTriag[i]中的各个字段不是自己动态分配的,因此无法释放它们。您需要释放整个结构,因为这是分配的:

for (i = 0; i < (*BeforeTriagSize); i++){
    free(BeforeTriag[i]);
}
free(BeforeTriag);

09-10 15:03