萨拉斯usk 2022-01-11 16:33 采纳率: 100%
浏览 69
已结题

leetcode heap buffer overflow错误

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;
}

```

  • 写回答

2条回答 默认 最新

  • 关注

    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 这里也是同样的道理

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 创建了问题 1月11日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看