【发布时间】:2020-03-29 09:54:51
【问题描述】:
我需要为面包店管理制作一个程序,我已经完成了结构和三个指针数组,它们必须包含这些结构的对象的指针。但我无法创建添加新面包店的功能,因为它需要动态内存分配。我试过这样做,但它会在 realloc 上抛出 Segmentation Fault。对于如何为这些数组正确重新分配内存以添加元素的任何建议,我将不胜感激。代码中的其他错误也可以随意提出cmets,我只是在学习。
typedef struct BakeryType {
char *name;
} BakeType;
typedef struct Bakerys {
char *name;
BakeType *type;
char *photo;
float weight;
int portions;
float price;
char *description;
} Bakery;
Bakery *bakeryList[0];
BakeType *bakeTypeList[0];
void addBakery() {
Bakery new;
*bakeryList = realloc(*bakeryList, (sizeof(bakeryList)/ sizeof(Bakery))+ 1);//Segmentation Fault
bakeryList[sizeof(bakeryList)/sizeof(Bakery)]=&new;
}
【问题讨论】:
-
您发布的代码似乎超出了您的问题的合理范围。请阅读How to Ask 以及如何制作minimal reproducible example;提供 MRE 可以帮助用户回答您的问题,并且未来的用户会与您的问题相关。 idownvotedbecau.se/nomcve
-
C 中不能有零大小的数组。这是一些 gcc 方言吗?同样出于对混淆的热爱,摆脱那些宏。如果需要,使用实函数。
-
@Lundin 它编译并运行零大小数组时没有警告,我怀疑我不能这样做,但编译器什么也没说,所以我让它去。如果我将数组大小更改为 1,问题仍然存在。好的,将重新制作宏以使其正常运行,谢谢。
-
@Lundin 你可以在 C 中使用零元素数组。试试看。
-
@WillisBlackburn 不,你不能,期间。使用 C 语言兼容的编译器 自己尝试一下。 godbolt.org/z/W4JFcV
标签: c arrays segmentation-fault structure realloc