倉庫と呼ばれる構造体と一般的なリンク リストがあり、各アイテムは倉庫構造体を指しています。
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;
}