gpt4 book ai didi

c - 纯 C - 传递结构指针的引用

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:14 27 4
gpt4 key购买 nike

我创建了一个程序,该程序正在从键盘加载带有学生信息的数据库,之后我尝试创建一个选项以将学生的新注册添加到该数据库

结构由

typedef struct {
long unsigned int aem;
char name[64];
short unsigned int lessonsToPass;
} Registration;

我已经在主函数上创建了它的指针

int i, sizeOfDatabase;
Registration *database
scanf("%d", &sizeOfDatabase);
database = (Registration*) malloc(sizeOfDatabase * sizeof(Registration));
for(i = 0; i < sizeOfDatabase; ++i){
scanf("%lu%63s%hu", &(database+i)->aem, (database+i)->name, &(database+i)->lessonsToPass);
for(tmp = (database+i)->name; (*tmp=toupper(*tmp)); ++tmp);
}

所以基本上我是从键盘获取数据库并将名称设为大写

之后我调用一个函数来添加一个新的注册

void add(char *aem, char *name, char *lessonsToPass, int currentDatabaseSize, Registration **database){
char *tmp;
int newSize = currentDatabaseSize + 1;
*database = (Registration*) realloc(*database, newSize * sizeof(Registration));
for(tmp = name; (*tmp=toupper(*tmp)); ++tmp);
(*database + newSize)->aem = atoi(aem);
strcpy((*database + newSize)->name, name);
(*database + newSize)->lessonsToPass = atoi(lessonsToPass);
}

char *name 永远不会大于 64,我仍然遇到编译错误 malloc(): corrupted top size

我错过了什么?

最佳答案

(*database + newSize)->aem = atoi(aem);

刚刚注销分配的 block ,因为 newSize 包含分配的记录数,包括现在正在创建的记录。正确代码:

(*database + newSize - 1)->aem = atoi(aem);
strcpy((*database + newSize - 1)->name, name);
(*database + newSize - 1)->lessonsToPass = atoi(lessonsToPass);

关于c - 纯 C - 传递结构指针的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54846380/

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