WatermelonJu1ce 2022-01-08 15:20 采纳率: 0%
浏览 133

刷Leetcode遇到好几次heap buffer overflow,不知道哪里出了问题

问题遇到的现象和发生背景

题目:88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

问题相关代码,请勿粘贴截图
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
  if(n!=0)
  {
    if(m!=0&&n!=0)
    {
        int nums3[m+n];
        int i=0,j=0,k=0;
        for(i=0;i<m+n;i++)
        {
            if((nums1[k]<=nums2[j])&&k<m)
            {
                nums3[i]=nums1[k];
                k++;
            }
            else if(j<n)
            {
                nums3[i]=nums2[j];
                j++;
            }
        }
        for(i=0;i<m+n;i++)
        {
            nums1[i]=nums3[i];
        }
    }
    else
    {
        for(int i=0;i<n;i++)
        {
            nums1[i]=nums2[i];
        }
    }

  }
}


运行结果及报错内容

img

我的解答思路和尝试过的方法

思路:

  1. 当nums2内无元素时,无需合并数组。
  2. 当nums2内有元素且nums1内也有元素时,创建一个长度为m+n的数组nums3,依次比较nums1和nums2内的元素,当nums1的指针小于m且nums2的指针小于n时,将较小元素的存入nums3中。最后将nums3数组的值依次赋给nums1。
  3. 当nums2内有元素且nums1内无元素时,将nums2的元素依次赋给nums1。
  • 写回答

4条回答 默认 最新

  • fuill 2022-01-08 15:49
    关注

    提交的程序包含main吗
    如果建立的数组在函数内,size太大了会造成内存溢出,可以把数组全部定义成全局数组

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月8日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题