代码如下,似乎没有任何问题。我的gcc找不到alloc.h
print(node *q)
39 {
40 node *p=q;
41 do
42 {
43 printf("%d",p->n);
44 if(p->ptr != NULL)
45 p=p->ptr;
46 else
(gdb)p p $ 1 =(节点*)0x0
分配内存的代码是
if(p== NULL)
{
p=(node *)malloc(sizeof(node));
if(p== NULL)
printf("The malloc failed\n");
p->n=num;
p->ptr=NULL;
}
当我在调试器中运行时,没有malloc失败的消息。
任何人都可以提供帮助。 此致
Sraddha
add(node **q)
{
node *p=*q;
int num;
printf("Enter the number you want to add");
scanf("%d", &num);
if(p== NULL)
{
p=(node *)malloc(sizeof(node));
if(p== NULL)
printf("The malloc failed\n");
p->n=num;
p->ptr=NULL;
}
}
答案 0 :(得分:5)
您需要在*q
函数中指定add()
,而不是本地p
:
add(node **q)
{
int num;
printf("Enter the number you want to add");
scanf("%d", &num);
if(*q == NULL)
{
*q = malloc(sizeof(node)); /* no need to cast return value. */
/* Corrected if logic to not access failed malloc. */
if(*q == NULL)
{
printf("The malloc failed\n");
}
else
{
*q->n=num;
*q->ptr=NULL;
}
}
}
答案 1 :(得分:0)
除了hmjd的回答所解决的问题之外,您可能还想考虑不同的程序设计。你已经让函数做了三件完全不同的事情:与用户交互,内存分配和实际算法。这个程序设计是导致错误的真正罪魁祸首。
相反,您可能想要考虑更面向对象的方法:
int prompt_user (void) // this function interacts with the user ("GUI")
{
int num;
printf("Enter the number you want to add");
scanf("%d", &num);
getchar(); // discard line feed character from stdin
return num;
}
void init_node (node* new_node, int num)
{
new_node->n = num;
new_node->ptr = NULL;
}
// this code is the caller:
{
node* q = NULL;
...
int num = prompt_user();
if(q == NULL)
{
q = malloc(sizeof(node));
if(q == NULL)
{
// error handling
}
}
init_node(q, num);
...
free(q);
}