VS引发了异常:读取访问权限冲突。p是nullptr(C++)

在写链表的时候有时会遇到以下问题:

在这里插入图片描述
代码如下:

#include<iostream>
using namespace std;

typedef struct stru {
	int data;
	struct stru *next;
} LinkList;


void CreateListR(LinkList *&L, int arr[], int n) {
	L = new LinkList;
	L->next = NULL;
	LinkList *p = L, *q;
	for (int i = 0; i < n; i++) {
		q = new LinkList;
		q->data = arr[i];
		p->next = q;
		p = q;
	}
	p->next = NULL;
}

int main()
{
	LinkList *L1, *L2;
	int arr1[] = { 1,6,11 };
	int arr2[] = { 2,3,4,5 };
	CreateListR(L1, arr1, sizeof(arr1) / sizeof(arr1[0]));
	CreateListR(L2, arr2, sizeof(arr2) / sizeof(arr2[0]));
	
	LinkList *p1 = L1->next, *p2 = L2->next;
	while (p1->data != p2->data && p1 != NULL && p2 != NULL) {
		p1 = p1->next;
		p2 = p2->next;
	}

	system("pause");
	return 0;
}

出现这种问题的可能原因是:在while循环的判断条件里,由于&&是先判断前者的真假,而此时p1已为NULL,无法读取data内存。

解决办法:
修改while循环的判断条件的顺序,优先判断是否为NULL。

while (p1 != NULL && p2 != NULL && p1->data != p2->data) {
		p1 = p1->next;
		p2 = p2->next;
	}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐