1、delete动态数组
如果delete的时候出现运行时错误,可能是之前发生过数组越界
int main()
{
int* a = new int[100];
for (int i = 0; i < 101; i++) //越界
{
a[i] = i;
}
delete[] a;
return 0;
}
2、快排
在坐标向中靠拢的时候除了比较和当前选中的数的大小外,还要判断边界
while(i < j)
{
while(j > i && a[j] >= num) j--; //这里和下面要判断边界
a[i] = a[j];
while(i < j && a[i] < num) i++;
a[j] = a[i];
}
3、归并排序
最后一步合并时,临时数组和目标数组的下标不是同一个
for (int i = b; i < e; i++)
{
merge[i] = tmp[i - b];
}
对这种直接二分采用不对称边界进行递归时,如果判断语句用
if (begin == end)
return;
进行返回的话,会产生无限递归,原因是当begin+1==end时, mid = (begin+end)/2; mid==begin成立,于是产生无限递归