leetcode heap buffer overflow错误

源码客栈网 毕业设计 1

C语言 (非C++)在做此题:

  1. 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。

前几个示例也能过,但是当输入为 [1] 1时就过不了,报heap buffer overflow错误,用VS2019测试正常


c int* searchRange(int* nums, int numsSize, int target, int* returnSize) { int low = 0, high = numsSize - 1; int pivot = (low+high)/2;

// if (target < nums[low] || target > nums[high]) {
//     low = -1;
//     high = -1;
// }

//二分查找
while (low <= high && nums[pivot] != target) {
    pivot = (low + high) / 2;
    if (target < nums[pivot] && low <= high) {
        high = pivot - 1;
    }
    else if (target > nums[pivot] && low <= high) {
        low = pivot + 1;
    }
}
if (low > high) {
    low = -1;
    high = -1;
}
//前后查找起始位置
else {
    low = pivot;
    high = pivot;
    while (nums[low] == target && low >= 0) low--;
    while (nums[high] == target && high <= numsSize-1) high++;
    low++;high--;
    //printf("%d,%d", ++low, --high);
}

//赋值returnSize
*returnSize = 2;
int *p = malloc(sizeof(int)*2);
p[0]= low;
p[1]= high;
return p;

}

```

回复

共1条回复 我来回复
  • 代码项目助手
    这个人很懒,什么都没有留下~
    评论

    while (nums[low] == target && low >= 0)这里,把 low>=0放在前面 while (low >= 0 && nums[low] == target ) while (nums[high] == target && high <= numsSize-1)这里,把high <= numsSize-1放在前面 while (high <= numsSize-1 && nums[high] == target ) 因为&&运算,先执行左边的,再执行&&右边的,当low >= 0的时候,原来的代码在执行 nums[low] == target 的时候,就已经越界了。high <= numsSize-1 这里也是同样的道理

    0条评论

发表回复

登录后才能评论