C++ 分段失效反向阵列

C++ 分段失效反向阵列,c++,segmentation-fault,C++,Segmentation Fault,我刚刚制作了一个反转阵列的程序,我在一个在线网站上提交了它。它通过了大多数测试用例,但显示了一个“分段错误”。在谷歌上阅读了相关内容后,我意识到这种情况通常发生在以下情况:- 解引用空 取消对未初始化指针的引用 解除对已释放或已超出范围的指针的引用 注销数组的结尾 因此,我认为我在结束数组时有一些错误 我的代码 #include<bits/stdc++.h> #include<stdlib.h> using namespace std; int main() {

我刚刚制作了一个反转阵列的程序,我在一个在线网站上提交了它。它通过了大多数测试用例,但显示了一个“分段错误”。在谷歌上阅读了相关内容后,我意识到这种情况通常发生在以下情况:-

  • 解引用空
  • 取消对未初始化指针的引用
  • 解除对已释放或已超出范围的指针的引用
  • 注销数组的结尾
因此,我认为我在结束数组时有一些错误

我的代码

#include<bits/stdc++.h>
#include<stdlib.h>
using namespace std;
int main()
{
    int i,n,j,temp=0;
    int arr[20];
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>arr[i];
    }
    j=i-1; 
    i=0;
    while(i<j)
    {
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
        i++;
        j--;
    }
    for(i=0; i<n; i++)
    {
        cout<<arr[i]<<" ";
    }

}
#包括
#包括
使用名称空间std;
int main()
{
内部温度i,n,j,温度=0;
int-arr[20];
cin>>n;
对于(i=0;i>arr[i];
}
j=i-1;
i=0;

而(i保存值的数组不够大。因此,您最终写入的值超过了数组的末尾。这将调用,在本例中表现为崩溃

您需要分配足够大的空间,以容纳以下数量的值:

cin>>n;
int *arr = new int[n];
不要忘记在程序结束时删除[]arr;

编辑:

如果你想用“适当”的C++方式,你可以使用<代码> STD::向量< /代码>:

cin>>n;
std::vector<int> arr(n);
cin>>n;
std::向量arr(n);

这样您就不必担心以后会释放内存。当
arr
超出范围时,它会自动发生。

好的,我刚刚意识到数组的大小是错误的。但它不会接受arr[]有什么建议吗?你事先知道尺码,还是尺码的上限?看看std::reverse@SaubhagyaSrivastava@SaubhagyaSrivastava尽管如此,该页面显示的效率最高algorithm@SaubhagyaSrivastava最常用的标准智能指针是and。以及
std::make_unique
std::make_sh如果您已经删除了
,您应该很少需要使用
new
,并且永远不必记住使用
delete