0

以下のコードがポインター 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;
4

2 に答える 2