c89 -在链表中搜索节点返回0x 1指针

eagi6jfj  于 2023-03-29  发布在  其他
关注(0)|答案(2)|浏览(93)

我不明白为什么下面的代码返回一个指针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。

**编辑:**这里是我的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;
e4eetjau

e4eetjau1#

我在一个if块中的赋值语句有一个问题,它也有一个比较语句。

((foundPtr = find_ticket(tm, ticketName, ticketType, ticketZone) != NULL));

相对于

((foundPtr = find_ticket(tm, ticketName, ticketType, ticketZone)) != NULL);

疯狂的错误。简单的解决方案。谢谢你们的帮助

cmssoen2

cmssoen22#

看起来最有可能的是你得到了堆栈损坏,并且实际上返回了'found'变量的值,该变量在返回之前的行中被设置为true(可能被定义为'1')。堆栈损坏的来源可能在其他地方。我会说,在调试器或Valgrind中运行。

相关问题