C语言 重新分配内存时的分段错误



我需要为面包店管理制作一个程序,我已经完成了结构和三个指针数组,它们必须包含这些结构对象的指针。但是我无法使函数添加新面包店,因为它需要动态内存分配。我试图这样做,但它在 realloc 上抛出了Segmentation Fault。如果有任何建议,我将不胜感激,这些建议可以正确重新分配这些数组的内存以添加元素。也请随时对代码中的其他错误发表评论,我只是在学习。

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

bakeryList是一个指向Bakery的指针的零元素数组。它有零指针的空间。

然而后来你把这个数组的第一个元素(*bakeryListbakeryList[0]相同(设置为从realloc返回的任何元素。所以你正在覆盖某些东西,它可能会从那里走下坡路。

我认为您希望bakeryList只是指向Bakery的指针。这就是动态分配数组在 C 中的工作方式:您定义指向第一个元素的指针并使用指针数学(例如,bakeryList[5]*(bakeryList + 5)(来访问其他元素。

另一个问题是你对sizeof(bakeryList)的使用。sizeof是由编译器计算的运算符。它在运行时不会更改。sizeof(bakeryList) / sizeof(Bakery)的计算结果将为零,因为您将bakeryList定义为零元素数组。您需要另一个变量来跟踪运行时数组中实际有多少元素。

这样的东西会起作用:

int bakeryCount = 0;
Bakery *bakeryList = NULL;
void addBakery() {
// Add one to the array.
bakeryCount++;
bakeryList = realloc(bakeryList, bakeryCount * sizeof (Bakery));
// Create a pointer to the new element at the end of the array.
Bakery *newBakery = bakeryList + bakeryCount - 1;
// Set all the fields. Note that they will probably contain
// garbage so you should set them all.
newBakery->name = ...
}

相关内容

  • 没有找到相关文章

最新更新