矩阵旋转分割故障
matrix rotation segmentation fault
为hackerrank中的矩阵旋转问题编写代码。我得到分割错误。代码不完整。我已经评论了我认为是制造问题,但不能识别错误的声明。请帮助。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct coord
{
int i,j;
} starting, current;
struct reference
{
float i,j;
} center;
int **a,m,n,t1,t2;
int goup()
{
float dist,dist2;
dist=sqrt((center.i-current.i)*(center.i-current.i)+(center.j-current.j)*(center.j-current.j));
do
{
t1=a[current.i-1][current.j];
a[current.i-1][current.j]=t2;//segmentation fault at this statement
t2=t1;
current.i--;
dist=sqrt((center.i-current.i)*(center.i-current.i)+(center.j-current.j)*(center.j-current.j));
} while(dist2!=dist);
return 0;
}
int main()
{
int t;
cin>>m>>n>>t;
a=new int*[m];
for(int i=0;i<m;i++)
a[i]=new int[n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
center.i=(float)(m-1)/2.0;
center.j=(float)(n-1)/2.0;
starting.i = center.i + (0.5)*(m%2+1);
starting.j = center.j + (0.5)*(n%2+1);
current.i=starting.i;
current.j=starting.j;
t2=a[starting.i][starting.j];
t1=a[starting.i-1][starting.j];
while(current.i!=m)
{
for(int i=0;i<t;i++)
{
goup();
// goleft();
// godowm();
// goright();
}
starting.i++;
starting.j++;
current.i=starting.i;
current.j=starting.j;
}
return 0;
}
由于dist2
从未初始化,dist2!=dist
很少为真,并且您减少current.i
的次数太多,以至于您最终访问数组外部并解引用可能在那里的任何随机数
不可能说如何修复它,因为你没有留下任何关于函数应该完成什么的线索。
用您想要的任何值初始化dist2
将是一个很好的开始,但是条件仍然不太可能为真。
相关文章:
- 分割故障C++矩阵
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 我正在为此代码分割故障
- 在执行strcpy时获取分割故障错误
- 空隙指针分割故障
- Xcode会产生分割故障,而不是例外
- OPENCV C 中的分割故障误差
- 分割故障:核心倾倒C 矢量对字符串:
- C 2D数组导致分割故障(核心倾倒)
- 分割故障/错误读数变量-C 列表
- DLSYM导致分割故障
- 使用C 中的操作员删除的分割故障
- 使用Linux X64下的Libmozjs-52(SpidermonKey)进行分割故障
- 使用长变量时分割故障(11)错误
- C - 返回字符串时的分割故障
- 创建VertexArray时的分割故障
- 向量分割故障的向量
- 从std :: fileSystem ::路径对象的类中退出时的分割故障
- C 矢量分割故障
- 基于向量的数据格式的分割故障误差