题目求助|程序异常问题
1229
2021.09.16
发布于 未知归属地
bool containsDuplicate(int* nums, int numsSize) {
	//先找到数组中的最大数max
	int max = nums[0];
	for (int i = 0;i < numsSize;i++)
	{
		if (nums[i] > max) max = nums[i];
	}
	//找出最大值max后 给数组a申请一片 max*sizeof(int) 大小的空间,并且清零
	int *a = (int*)malloc(max * sizeof(int));
	for (int i = 0;i < max;i++)
	{
		a[i] = 0;
		
	}
	int n=0;
	//遍历nums数组,提取nums数组中的数赋值,使a数组该下标-1的数累加
	for (int i = 0;i < numsSize;i++)
	{
		n = nums[i];
		
		a[n-1]=a[n-1]+1;
	}
	//遍历数组a,看是否有数大于1若有则返回ture,且输出该数,若无则返回false
	bool again = false;
	for (int i = 0;i < max;i++)
	{
		if (a[i] > 1)
		{
			again = true;
		//	printf("%d", i+1);
		}
	}

	return again;

}

存在访问溢出错误,未找到具体解决方法。
知道错误点是在下段程序,但并未想到为何访问数组下标溢出。
//遍历nums数组,提取nums数组中的数赋值,使a数组该下标-1的数累加
for (int i = 0;i < numsSize;i++)
{
n = nums[i];

	a[n-1]=a[n-1]+1;
}
评论 (4)