这个问题的输出是正确的,但我得到了一个分割错误



我正在尝试解决数组旋转的程序。我在代码中出现分段错误。有人能告诉我这个代码的问题在哪里吗?

这是的问题

给定一个大小为N的未排序数组arr[],将其旋转D个元素(顺时针(。

输入的第一行包含T,表示测试用例的数量。每个测试用例的第一行包含两个空格分隔的元素,N表示数组的大小,整数D表示旋转的数字大小。后续行将是N个空格分隔的数组元素。

我用下面的代码解决了这个问题。

#include <iostream>
using namespace std;
int* rotate(int ar[],int n, int m)
{static int temp[100];
for(int i =0;i<m;i++)
{
temp[i]=ar[i];
}
for(int j =m;j<n;j++)
{
ar[j-m]=ar[j];
}
int x=0;
for(int k =n-m;k<n;k++)
{   
ar[k]=temp[x];
x++;
}
return ar; 
}

int main() {
//code

int t, n , m;
cin>>t;
while(t>0)
{
cin>>n>>m;
int arr[n];
int * ptr;
for(int i = 0 ;i<n;i++)
{
cin>>arr[i];
}

ptr=rotate(arr,n,m);
for(int j=0;j<n;j++)
cout<<ptr[j]<<" ";

cout<<endl;

t--;
}



return 0;
}

如果m>n然后当你索引超过arr.的末尾时,它在旋转中的第一个for((循环中崩溃

如果m<0它在第二个循环中崩溃,因为它在arr.之前索引

可能还有更多的案例。

相关内容

最新更新