以下のコードがポインター 0x1 を返す理由がわかりません。次の出力が示すように、在庫ノードは問題なく検出されます。
ticket_name passed comparison.
ticket_type passed comparison.
ticket_zone passed comparison.
しかし、返されたポインターは 0x1 であり、そのポインターをリンクされたリスト内のポインターと比較してノードを削除しようとしていますが、明らかに失敗しています。関数についてもコンパイル時に警告があります。
tm_options.c:85: warning: assignment makes pointer from integer without a cast
tm_options.c:190: warning: assignment makes pointer from integer without a cast
私が知る限り、この警告は、関数に関数プロトタイプがなく、プロトタイプのない関数のデフォルトの戻り値の型が int であるためです。しかし、tm_utility.h に関数プロトタイプがあります。
編集:それが何か関係がある場合に備えて、私のMakefileのペーストビンをここに置きます http://pastebin.com/UFw9B4Hd
struct stock_node * find_ticket(tm_type_ptr tm, char *, char, char *);
以下は、エラー値を返す関数です。
struct stock_node * find_ticket(tm_type * tm, char * ticketName, char ticketType, char * ticketZone) {
struct stock_node * curr;
BOOLEAN found = FALSE;
curr = tm->stock->head_stock;
while (curr != NULL && found == FALSE) {
printf("curr: %p\n", (void *) curr);
printf("curr->ticket_name: %s\n", curr->data->ticket_name);
printf("curr->ticket_type: %c\n", curr->data->ticket_type);
printf("curr->ticket_zone: %s\n", curr->data->ticket_zone);
if (strncmp((char *)curr->data->ticket_name, ticketName, TICKET_NAME_LEN + 1) == 0) {
printf("ticket_name passed comparison.\n");
if ((char) curr->data->ticket_type == ticketType) {
printf("ticket_type passed comparison.\n");
if (strncmp((char *)curr->data->ticket_zone, ticketZone, TICKET_ZONE_LEN + 1) == 0) {
printf("ticket_zone passed comparison\n");
found = TRUE;
return curr;
}
}
} else {
curr = curr->next_node;
}
}
return NULL;
}
どんな助けでも大歓迎です。さらに詳しい情報が必要な場合は、ためらわずに私に尋ねてください。
呼び出しコードは次のとおりです。
struct stock_node * stockNode;
((stockNode = find_ticket(tm, ticketName, ticketType, ticketZone) != NULL))
要求どおり: struct stock_node 定義:
typedef struct stock_node
{
struct stock_data * data;
struct stock_node * next_node;
} stock_node;
また、tm_type_ptr:
typedef struct tm * tm_type_ptr;