【发布时间】:2019-12-04 18:58:12
【问题描述】:
在第一次调用addBakeType() 后,它正确地将新的 BakeType 对象指针添加到数组,但在第二次调用它之后,它似乎在realloc() 期间更改了数组的地址,因此指向数组中前一个元素的指针正在获取搞砸了,指向错误的记忆。任何想法如何处理它?
typedef struct BakeryType {
char *name;
} BakeType;
BakeType *bakeTypeList=NULL;
int baketypelistcounter=0;
BakeType* addBakeType(char *str){
baketypelistcounter++;
bakeTypeList = realloc(bakeTypeList, baketypelistcounter * sizeof (BakeType));
BakeType *newBakeType = bakeTypeList + baketypelistcounter - 1;
newBakeType->name=malloc(10* sizeof(char));
newBakeType->name=str;
return newBakeType;
}
【问题讨论】:
-
你不能。使用索引号作为参考,相对于数组的开头而不是指针。
-
您需要在存储结构时对字符串进行strdup,或者在手动为其分配内存时对其进行strcpy(正如您所做的那样,尽管您应该根据字符串长度分配正确的内存量,而不是固定数量的 10 个字节)