我不明白为什么下面的代码返回一个指针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;
2条答案
按热度按时间e4eetjau1#
我在一个if块中的赋值语句有一个问题,它也有一个比较语句。
相对于
疯狂的错误。简单的解决方案。谢谢你们的帮助
cmssoen22#
看起来最有可能的是你得到了堆栈损坏,并且实际上返回了'found'变量的值,该变量在返回之前的行中被设置为true(可能被定义为'1')。堆栈损坏的来源可能在其他地方。我会说,在调试器或Valgrind中运行。