我有一个名为仓库的结构和一个通用的链表,每个项都指向一个仓库结构。
typedef struct linked{
char type;
void * item;
struct linked * next;
struct linked * prev;
}LinkedList;
typedef struct warehouse{
char * name;
float volume;
float (* getPrice) (void * S);
float (* getTotalDollarAmount)(void * S);
}house_t;
当我试图让getPrice
函数指针指向函数float price (void *S)
void menu (LinkedList *house){
char *c;
float num;
c = (char*)malloc(sizeof(char)*10);
LinkedList *i;
i = (LinkedList*)malloc(sizeof(LinkedList);
house_t *sk;
sk = (house_t *) malloc(sizeof(house_t));
//i->item = (house_t *) malloc(sizeof(house_t));
scanf("%c", c);
((house_t*)i->item)->getPrice = price;
sk=findhouse(house, c);
num = ((house_t*)i->item)->getPrice(sk);
printf("%f",num);
}
我的访问错误很糟糕。因为每次我遇到错误的访问错误都是因为我没有为某些东西分配内存。但是我需要为函数指针分配内存吗?如果是这样,怎么样?
这是一些更多的代码
float price (void *S)
{
return ((house_t*)S)->volume;
}
答案 0 :(得分:1)
LinkedList *i;
i = NewLinkedList();
/* ... snip ... */
LinkedList *NewLinkedList()
{
return NULL;
}
根据您对NewLinkedList()
的定义,变量i
现在是NULL
。您尝试使用i->item = ...
取消引用它,但如果i
为NULL
,则无法执行此操作。我认为你真正想做的是在NewLinkedList
函数中为你的链表分配空间:
LinkedList * NewLinkedList()
{
LinkedList *result = malloc(sizeof(LinkedList));
result->type = '\0'; // set to suitable initial value
result->item = NULL;
result->next = NULL;
result->prev = NULL;
return result;
}