C ++中动态分配的向量中的分段错误

Posted

技术标签:

【中文标题】C ++中动态分配的向量中的分段错误【英文标题】:Segmentation fault in a dynamically allocated vector in C++ 【发布时间】:2017-04-30 15:29:34 【问题描述】:

我正在编写代码来检查 zig-zag 数组(其 3 个连续元素不是按递增或递减顺序排列的数组)并返回要删除的最小元素数以使其成为 zig-zag。但是我遇到了大型数组的分段错误。

#include <bits/stdc++.h>

using namespace std;

int minimumDeletions(vector < int > a,int n)
int i,j;
j=n;
for(i=0;i<n;i++)
    if(a[i]>a[i+1])
        if(a[i+1]>a[i+2])
            a.erase(a.begin()+(i+2));
            i--;
            n--;
            continue;
        
        elsecontinue;
    
    if(a[i]<a[i+1])
        if(a[i+1]<a[i+2])
            a.erase(a.begin()+(i+2));
            i--;
            n--;
        
        elsecontinue;
    

j=j-n;
return j;


int main() 
int n;
cin >> n;
vector<int> a(n);
for(int a_i = 0; a_i < n; a_i++)
   cin >> a[a_i];

// Return the minimum number of elements to delete to make the array zigzag
int result = minimumDeletions(a,n);
cout << result << endl;
return 0;

【问题讨论】:

我建议你开始使用迭代器,忘记基于索引的遍历。它会解决很多错误。 【参考方案1】:
a[i+1]

在这里,您到达了一个未存储在向量中的元素。当 i=n-1 时,你的 a[n] 基本上不会存储在你的向量中。

【讨论】:

那么为什么它适用于具有 5-6 个元素的数组?

以上是关于C ++中动态分配的向量中的分段错误的主要内容,如果未能解决你的问题,请参考以下文章

C ++ 11分段错误试图将数组(<算法>)动态复制到向量中

带有向量迭代器的程序中的分段错误

C++ 动态内存分配与结构中的数组

C语言中的动态内存分配的用法举例

C语言之动态内存管理(动态内存分配+经典笔试题+柔性数组)[建议收藏]

c和c ++中的动态内存分配和堆有啥区别