【问题标题】:Segmentation fault in array for max index difference problem [closed]最大索引差异问题的数组分段错误[关闭]
【发布时间】:2020-10-25 13:57:36
【问题描述】:

我编写了这个 c++ 函数来查找数组中的最大索引差异,因为 arr[i]

约束:- 1≤T≤1000 1≤N≤10^7 0 ≤ A[i] ≤ 10^18

    long long maxIndexDiff(int  arr[], int n) 
{ 
    
    // Your code here
    vector<long long  > num;
    for(long i=0;i<n;i++)
    {
        num.push_back(arr[i]);
    }
    long high =n-1;
    long low=0;
    long i_index,j_index;
    while(low<high)
    {
        if(num[high]>=num[low])
        {
            i_index=low;
            j_index=high;
            break;
        }
         
        low++;
        high--;
    }
    
   for(long i=j_index;i<n;i++)
   {
       if(num[i]>=num[i_index])
       j_index=i;
   }
   
   for(long i=i_index;i>=0;i--)
   {
       if(num[i]<=num[j_index])
       i_index=i;
   }
    
    return (j_index-i_index);
}

【问题讨论】:

  • 你试过用调试器运行它吗?
  • 您可能越界访问num
  • 不,我没有尝试调试器,如何修复越界错误?即使我删除向量并使用数组,它也会显示分段错误
  • 您使用数组使问题变得更糟。访问向量中的元素时,只需使用vector::at() 而不是[ ]。如果值越界,其中一个at() 调用将引发std::out_of_range 异常。
  • 如果你不使用调试器,学习如何使用调试器是一个很好的操作

标签: c++ arrays vector indexing segmentation-fault


【解决方案1】:

它对N=1 不应该正常工作,因为在这种情况下while(low&lt;high) 循环将在没有一次迭代的情况下完成,i_indexj_index 都将保持单化。

【讨论】:

  • 谢谢,昨天才发现我的代码有这个错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2019-04-08
  • 1970-01-01
  • 2017-05-11
  • 2018-03-12
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多