关于vs2019 .exe触发一个断点的错误:

关于vs2019 .exe触发一个断点的错误:

可能是在访问动态内存管理的数组是越界;

void  Initcontact(struct contact* con)
{
	con->arr = (struct peoinfo*)malloc(DEFAULT_SZ * sizeof(struct peoinfo));
	if (con->arr == NULL)
	{
		return ;
	}
	con->size = 0;//设置通讯录初始元素只有一个
	con->capacity = DEFAULT_SZ;
	//把文件中存在的信息加载到通讯录中
	loadcontact(con);
}
void CheckCapacity(struct contact* ps)
{
	if (ps->size== ps->capacity)
	{
		//增容
	struct peoinfo*ptr=(struct peoinfo* )realloc(ps->arr, (2 + ps->capacity) * sizeof(struct peoinfo));
	if (ptr != NULL)
	{
		ps->arr = ptr;
		ps->capacity += 2;
		printf("增容成功\n");
	}
	else
	{
		printf("增容失败\n");
	}
	void loadcontact(Contact* con)
{
	FILE* pf = fopen("contact.txt", "rb");
	if (pf == NULL)
	{
		printf("%s\n", strerror(errno));
		return;
	}
	
	while (fread(&(con->arr[con->size]), sizeof(struct peoinfo), 1, pf))
	{
		CheckCapacity(con);
		con->size++;
	};
	fclose(pf);
	pf = NULL;
}

这是我在写通讯录时与到问错误:

在加载通讯录内容时,当文本中的内容超过通讯录初始内容时 访问arr[con->size]就会越界访问造成一下错误

关于vs2019 .exe触发一个断点的错误:_第1张图片

应该在检查通讯录容量时把if (ps->size== ps->capacity)改为if (ps->size+1== ps->capacity)

防止其越界;

所以遇到.exe触发了一个断点的错误,应该去找出是否有越界访问的数组。一步步调试就可以找出问题所在。

注:本人小白一个,如有不正确请大家提醒改正。

你可能感兴趣的:(c语言)