#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
int data;//结点所对应的数据
struct node* Next;//指向下一个结点的指针next
}l, * list;
list H;
list makebiao(int n)//n为元素个数
{
int i;
list H;
H = (list)malloc(sizeof(l));
H->Next= (list)malloc(sizeof(l));
H->data = 0;
list p = H->Next;
p->Next= (list)malloc(sizeof(l));
for (i = 1; i < n; i++)
{
p->data = i;
p = p->Next;
}
return H;
}
void destroy(list* H)
{
list p, q;
p = *H;
while (p)
{
q = p;
p = p->Next;
free(q);
}
*H = NULL;
}
list insert(list H, int x)
{
list p, q;
p = (list)malloc(sizeof(l));
q = (list)malloc(sizeof(l));
for (p = H; p->Next->data <= x; p = p->Next)
{
}
q->data = x;
q->Next = p->Next;
q = p->Next;
return H;
}
void putbiao(list H)
{
while (H)
{
printf("%d\t", H->data);
H = H->Next;
}
}
int main()
{
list H;
H = makebiao(99);
putbiao(H);
insert(H, 5);
putbiao(H);
destroy(&H);
return 1;
}
报错图片
修改如下,改动处见注释,供参考:
#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
int data;//结点所对应的数据
struct node* Next;//指向下一个结点的指针next
}l, * list;
list H;
list makebiao(int n)//n为元素个数
{
int i;
list H;
H = (list)malloc(sizeof(l));
H->Next = NULL; //H->Next= (list)malloc(sizeof(l)); 修改
H->data = 0;
list p = H; // list p = H->Next; 修改
//p->Next= (list)malloc(sizeof(l)); 修改
for (i = 1; i <= n; i++) // for (i = 1; i < n; i++) 修改
{
p->Next = (list)malloc(sizeof(l));
p->Next->Next = NULL;
p->Next->data = i;
p = p->Next;
}
return H;
}
void destroy(list* H)
{
list p, q;
p = *H;
while (p)
{
q = p;
p = p->Next;
free(q);
}
*H = NULL;
}
list insert(list H, int x)
{
list p, q;
p = NULL; //p = (list)malloc(sizeof(l)); 修改
q = (list)malloc(sizeof(l));
q->data = x;
for (p = H; p->Next && p->Next->data <= x; p = p->Next); // 修改
// for (p = H; p->Next->data <= x; p = p->Next)
q->Next = p->Next;
p->Next = q; //q = p->Next; 修改
return H;
}
void putbiao(list H)
{
H = H->Next; // 修改
while (H)
{
printf("%d\t", H->data);
H = H->Next;
}
}
int main()
{
list H;
H = makebiao(99);
putbiao(H);
insert(H, 5);
putbiao(H);
destroy(&H);
return 1;
}
for 循环中没malloc
【以下回答由 GPT 生成】
在你的代码中出现了异常访问冲突的问题是因为你在makebiao函数中没有正确地设置链表的结构。在该函数中,你将第一个结点作为头结点,并分配了两个额外的结点,但是没有正确连接它们。
以下是对于你代码中出现问题的地方进行修正的具体步骤:
H->Next
的分配和设置移动到for循环开始处,并将H->data
的赋值从循环内移到循环前。修正后的代码如下:
c list makebiao(int n) { list H; H = (list)malloc(sizeof(l)); H->data = 0; list p = H; for (int i = 1; i < n; i++) { p->Next = (list)malloc(sizeof(l)); p->Next->data = i; p = p->Next; } p->Next = NULL; return H; }
修正后的代码如下:
c list insert(list H, int x) { list p, q; q = (list)malloc(sizeof(l)); for (p = H; p->Next != NULL && p->Next->data <= x; p = p->Next) { // 在这里查找插入位置 } q->data = x; q->Next = p->Next; p->Next = q; return H; }
完成以上修正后,重新运行程序应该不会再出现异常访问冲突的问题。
最终修正后的完整代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data; // 结点所对应的数据
struct node* Next; // 指向下一个结点的指针next
} l, *list;
list makebiao(int n) {
list H;
H = (list)malloc(sizeof(l));
H->data = 0;
list p = H;
for (int i = 1; i < n; i++) {
p->Next = (list)malloc(sizeof(l));
p->Next->data = i;
p = p->Next;
}
p->Next = NULL;
return H;
}
void destroy(list* H) {
list p, q;
p = *H;
while (p) {
q = p;
p = p->Next;
free(q);
}
*H = NULL;
}
list insert(list H, int x) {
list p, q;
q = (list)malloc(sizeof(l));
for (p = H; p->Next != NULL && p->Next->data <= x; p = p->Next) {
// 在这里查找插入位置
}
q->data = x;
q->Next = p->Next;
p->Next = q;
return H;
}
void putbiao(list H) {
while (H) {
printf("%d\t", H->data);
H = H->Next;
}
}
int main() {
list H;
H = makebiao(99);
putbiao(H);
insert(H, 5);
putbiao(H);
destroy(&H);
return 1;
}
请尝试使用修正后的代码运行程序,应该可以成功解决异常访问冲突的问题。如有其他问题,请随时提问。
【相关推荐】