codeblocks调试时出现0x76f369f5 unlock+21这样的指针代表什么意思?
以下为代码,是一个用递归法求最大子序列的程序,输出应该是越界了
class Max_Subarray
{
public:
Max_Subarray(int *left,int *right,int ans): low(left),high(right),sum(ans) {}
Max_Subarray(const Max_Subarray &target) {low = target.low; high = target.high; sum = target.sum;}
int *low;
int *high;
int sum;
};
Max_Subarray find_max_subarray(int *low,int *high)
{
if (high-low==0)
return Max_Subarray(low,high,0);
if (high-low==1)
{
if ((*low)<0)
return Max_Subarray(low,high,0);
else
return Max_Subarray(low,high,*low);
}
int *middle = low+(high-low)/2;
//cout << "+" << high-middle << "+ " << endl;//这一句删掉就正常了
Max_Subarray left_Max(find_max_subarray(low,middle));
Max_Subarray right_Max(find_max_subarray(middle+1,high));
Max_Subarray middle_Max(find_max_crossing_subarray(low,middle,high));
if (left_Max.sum>right_Max.sum)
if (left_Max.sum>middle_Max.sum)
return left_Max;
else
if (right_Max.sum>middle_Max.sum)
return right_Max;
else
return middle_Max;
}
Max_Subarray find_max_crossing_subarray(int *low,int *middle,int *high)
{
if ((*middle)<0)
return Max_Subarray(middle,middle,0);
int sum = 0,part_Sum = 0, *left = middle, *right = middle;
for (int *pointer = middle-1,sum_0 = 0;pointer>=low;--pointer)
{
if (sum_0+(*pointer)<0)
break;
sum_0 += (*pointer);
if (sum_0>part_Sum)
{
left = pointer;
part_Sum = sum_0;
}
}
sum += part_Sum;
part_Sum = 0;
for (int *pointer = middle,sum_0 = 0;pointer<high;++pointer)
{
if (sum_0+(*pointer)<0)
break;
sum_0 += (*pointer);
if (sum_0>part_Sum)
{
right = pointer;
part_Sum = sum_0;
}
}
sum += part_Sum;
return Max_Subarray(left,right+1,sum);
}