【发布时间】:2021-01-11 21:33:44
【问题描述】:
在第一行它打印的是 64 而不是 pf 0100,它试图改变值,我注意到如果我把 0 放在第一位,那么输出是每个数字的总和到 8 的幂。 如果 0 没有开始,那么它正在打印相同的数字。 帮帮我,这是什么问题。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
typedef struct node
{
int num;
struct node *next;
}
node;
node* list = NULL;
node *n1 = malloc(sizeof(node));
if (n1 != NULL)
{
n1 -> num = 111111;
n1 -> next = NULL;
}
list = n1;
node *n2 = malloc(sizeof(node));
if (n2 != NULL)
{
n2 -> num = 22222;
n2 -> next = NULL;
n1 -> next = n2;
}
// addind n3 in middle of n1 n2
node *n3 = malloc(sizeof(node));
if (n3 != NULL)
{
n3 -> num = 33333;
n3 -> next = n2;
n2 -> next = NULL;
n1 -> next = n3;
}
// ADDIND TO THE END OF LIST
node *n4 = malloc(sizeof(node));
if (n4 != NULL)
{
n4 -> num = 444;
n4 -> next = NULL;
node *tmp1 = NULL;
tmp1 = list;
while (tmp1 -> next != NULL)
{
tmp1 = tmp1 -> next;
}
tmp1 -> next = n4;
}
// ADDING TO THE STARTING OF LIST
node *n5 = malloc(sizeof(node));
if (n5 != NULL)
{
n5 -> num = 0100;
n5 -> next = list;
list = n5;
}
node *tmp = list;
while(tmp != NULL)
{
printf("%d\n", tmp -> num);
tmp = tmp -> next;
}
}
输出是
64
111111
33333
22222
444
【问题讨论】:
-
当你使用调试器时,程序做错的第一件事是什么?
-
看来您应该使用
const char* num;而不是int num;和n5 -> num = "0100";而不是n5 -> num = 0100;。还将其他assignmens更改为nx -> num以分配字符串,将printf("%d\n", tmp -> num);更改为printf("%s\n", tmp -> num);。
标签: c linked-list segmentation-fault cs50