VS2022引发了未经处理的异常:读取访问权限冲突。 **p** 是 0xFFFFFFFFFFFFFFF7。
#include<stdio.h>#include<stdlib.h>
#pragma warning(disable:4996)
typedef struct ListNode
{
struct ListNode* prior;
char x;
struct ListNode* next;
}ListNode;
ListNode* creat()
{
ListNode *p, *q, * head;;
int i;
p = (ListNode*)malloc(sizeof(ListNode));
head = p;
p->next = p->prior = NULL;
for (i = 0; i < 26; i++)
{
q = (ListNode*)malloc(sizeof(ListNode));
q->x = 'A' + i;
q->prior = p;
p->next = q;
p = q;
}
head->next->prior = p;
return head->next;
}
int main()
{
ListNode* head = creat();
ListNode* p;
int i, b;
p = head;
printf("请输入数字 : ");
b = scanf("%d", &b);
if (b > 0)
{
do
{
p = p->next;
} while (b--);
for (i = 0; i < 26; i++)
{
printf("%c ", p->x);
p = p->next;
}
}
else
{
b = -b;
do
{
p = p->next;
} while (b--);
for (i = 0; i < 26; i++)
{
printf("%c ", p->x);
p = p->next;
}
}
return 0;
} 本帖最后由 jhq999 于 2022-3-18 20:47 编辑
sunjiam 发表于 2022-3-18 20:22
好神奇,大佬可以具体说一下为什么吗
head<->a<->b<->c<->……<->z
这时候p=z//大概意思
head->next->prior = p;//a->prior=z
p->next=head->next;//z->next=a
free(head);//没用了痛快释放,要不然可能造成内存泄漏
这样就形成了双向循环链表
return p->next;//返回a
ListNode* creat()
{
ListNode *p, *q, * head;;
int i;
p = (ListNode*)malloc(sizeof(ListNode));
head = p;
//p->next = p->prior = NULL;
for (i = 0; i < 26; i++)
{
q = (ListNode*)malloc(sizeof(ListNode));
q->x = 'A' + i;
q->prior = p;
p->next = q;
p = q;
}
head->next->prior = p;
p->next=head->next;/////
free(head);//////////
return p->next;//////////
} jhq999 发表于 2022-3-18 06:36
好神奇,大佬可以具体说一下为什么吗 jhq999 发表于 2022-3-18 06:36
p->next = head->next;
free(p);
return head->next;
我这样free就是错误的到底是为啥啊 sunjiam 发表于 2022-3-18 20:30
p->next = head->next;
free(p);
return head->next;
经过p->next = q; p = q;已经不等于head了 jhq999 发表于 2022-3-18 20:34
经过p->next = q; p = q;已经不等于head了
head->next->prior = p;
free(p);
return head->next;
我直接释放掉p不可以吗 我初学,这个free()到底怎么用了 free(p);
释放的是指针p所指向的内存空间吗 jhq999 发表于 2022-3-18 20:44
headabc……z
这时候p=z//大概意思
head->next->prior = p;//a->prior=z
懂了懂了
这个漏了p->next=head->next;//z->next=a
哈哈 jhq999 发表于 2022-3-18 20:44
headabc……z
这时候p=z//大概意思
head->next->prior = p;//a->prior=z
我还有一个问题
我在这里手动释放free(p)
p->next=head->next;//z->next=a
这样子p指向的内个内存空间就被释放了,可能会被垃圾值覆盖是吗 sunjiam 发表于 2022-3-18 20:49
我还有一个问题
我在这里手动释放free(p)
p->next=head->next;//z->next=a
可能 {:5_95:}
页:
[1]