我很难理解我的代码中的错误,
正如你所看到的,它是一个链表,它应该连接“Boxes”,每个Box都有一个int值和指向下一个Box的指针,但是我无法让它运行而且我不能我知道为什么。
有谁可以告诉我它为什么没有运行?
#include <stdio.h>
#include <stdlib.h>
struct node {
int n;
struct node *next;
} node;
typedef struct node Box;
main()
{
Box *q, *r, *s;
Box t;
q = (Box *)malloc(sizeof(Box));
r = (Box *)malloc(sizeof(Box));
s = (Box *)malloc(sizeof(Box));
q->n = 2;
q->next->n = 3;
r->n = 4;
q->next->next = r;
r->next = NULL;
s->n = 5;
s->next = NULL;
t.n = 6;
printf("================");
printf("Q == %d\n", q->n);
printf("R == %d\n", r->n);
printf("S == %d\n", s->n);
printf("{%d}{%d}{%d}{%d}{%d}", q->n, q->next->n, r->n, s->n, t.n);
}
答案 0 :(得分:3)
您的初始化序列非常混乱,这使得它通过写入非初始化指针来调用未定义的行为。
应该是:
O(n^2)
答案 1 :(得分:3)
您为q
Box *q = malloc(sizeof(Box));
然后您使用q->next
而未指定它:
q->n = 2;
q->next->n = 3;
答案 2 :(得分:2)
您正在写入未分配的内存:
q->n = 2;
q->next->n = 3; //q->next points "into the wild" here
您可能想要这样的事情:
q = malloc(sizeof(Box));
q->next = malloc(sizeof(Box));
q->next->n = 3;
由于这是重复的,你应该写一个例程来完成这个任务:
void append(Box* where, int what) {
...
}
清理:
void delete(Box* where) {
...
}