gpt4 book ai didi

c - C 中的动态内存与结构体

转载 作者:行者123 更新时间:2023-11-30 19:10:23 25 4
gpt4 key购买 nike

我已经有了这段代码,但它不起作用,出了什么问题?我尝试制作大量具有动态大小的结构(C语言)第二次使用 add_sala() 后;在主函数 Windows 中关闭程序。请帮忙解决这个问题!谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
char trash[50];
int dyn_sala_id=1;
typedef struct
{
int id;
char number[6];
int persons;
char tech_inf[256];
} sala;
sala *sala_;

int add_sala()
{
int persons;
char number[6], tech_inf[256];


sala_ = (sala*)realloc(sala_,dyn_sala_id * sizeof(sala));

printf("Wpisz numer sali(max. 5 znakow): ");
fgets(number,6,stdin);
if(strlen(number)>5)
{
printf("Numer musi byc nie wiecej, niz 5 znakow!\n");
fflush(stdin);
add_sala();
return 0;
}

printf("Wpisz ilosc osob, ktora wmiesci sie w sale(max. 1000 osob): ");
scanf("%d", &persons);
if(persons==0 || persons>1000)
{
printf("Nie wolno wprowadzic litery oraz max. ilosc osob to 1000\n");
fflush(stdin);
add_sala();
return 0;
}

printf("Wpisz info o wyposazeniu sali(max. 255 znakow): ");
fgets(trash,50,stdin);
fgets(tech_inf,256,stdin);
if(strlen(tech_inf)>255)
{
printf("Info musi byc nie wiecej, niz 255 znakow!\n");
fflush(stdin);
add_sala();
return 0;
}

sala_[dyn_sala_id].id = dyn_sala_id;
strncpy(sala_[dyn_sala_id].number, number, 6);
sala_[dyn_sala_id].persons = persons;
strncpy(sala_[dyn_sala_id].tech_inf, tech_inf, 256);
printf("\nSala zostala dodana!\n\n");
printf("%d, %d, %s, %s",dyn_sala_id, persons, number, tech_inf);
dyn_sala_id+=1;
return 0;
}

int main()
{
add_sala();
printf("%s",sala_[1].number);
add_sala();
printf("'%s'",sala_[1].number);
printf("'%s'",sala_[2].number);
return 0;
}

最佳答案

C 中的数组从 0 开始索引,因此在 main() 中数组索引偏移 1。

add_sala();
printf("%s",sala_[1].number);
add_sala();
printf("'%s'",sala_[1].number);
printf("'%s'",sala_[2].number);

此外,在函数 add_sala() 中,很明显,第一次调用它时,您拥有全局

int dyn_sala_id=1;

用于为一条记录分配内存

sala_ = (sala*)realloc(sala_,dyn_sala_id * sizeof(sala));

但再往下一点,索引再次偏移 1,显然只有一个数组元素

sala_[dyn_sala_id].id = dyn_sala_id;

然后,在同一个函数中(尽管我无法读取错误消息),在明显错误的输入之后,您递归了该函数,这似乎很奇怪。另外,您有未定义的行为

fflush(stdin);

我没有进一步查看,因为代码无法工作。

关于c - C 中的动态内存与结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41384452/

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