繁体   English   中英

分割错误[2D阵列]

[英]Segmentation Fault [2D array]

#include <iostream>

using namespace std;

void input_Array(char (&A)[10][10], int x, int y);
int calc_Collision(char (&A)[10][10]);
void display(char (&A)[10][10]);
void init_Array(char (&A)[10][10]);

int main()
{
  int m,n,test;
  char A[10][10];
  init_Array(A);
  cin>>test;
  while (test>0)
  {
    cin>>m>>n;
    input_Array(A,m,n);
    display(A);
    cout<<"FLAG";
    cout<<calc_Collision(A);
    test--;
  }
}

//Calculates no. of ways to select two 1's in each column
int calc_Collision(char (&A)[10][10])
{
  int count=0;
  int sum=0;
  int select(int x, int y);
  for (int j = 0; j<10; j++)
  {
   count=0;
    for(int i = 0; i<10; i++)
    {
      if (A[i][j]=='1')
      {
        count++;
      }
    }
    sum=sum + select(count,2);
  }
  return sum;
}

//Returns no. of ways to select y items from x items
int select(int x, int y)
{
  int fact(int a);
  return (fact(x)/(fact(y)*fact(x-y)));
}

//Returns a!
int fact(int a)
{
  if (a==0)
  {
    return 1;
  }
  else
  {
    return (a*fact(a-1));
  }
}

void display(char (&A)[10][10])
{
  for (int i=0; i<10; i++)
  {
    for (int j=0; j<10; j++)
    {
      cout<<A[i][j]<<"\t";
    }
    cout<<"\n";
  }
}

输入格式:

没有。 试验

没有。 行数(空格) 列数

第1行(无空格,只能为1或0)

第2行...

输出:

2D阵列

总数 每列中选择两个的方式

问题:

程序显示足够精细的数组。

但是在遇到calc_Collision(A)时,代码输出:

分段故障(核心已转储)

不显示“标志”。

这里还是一个初学者,因此将不胜感激。

int select(int x, int y){
  int fact(int a);
  return (fact(x)/(fact(y)*fact(x-y)));
}


int fact(int a){
  if (a==0)  {
    return 1;
  }
  else  {
    return (a*fact(a-1));
  }
}

请注意,如果select x小于2,则fact(xy)将无限期地调用自身。 这是因为变量a fact将为负。 当输入数组的大小少于10列时,会发生这种情况,导致最后一列变为空。 这将导致calc_Collisioncount的迭代变为0。 如果输入有10列,则不会发生分段错误。 由于仅计算nC2(N选择2),因此select函数可以重写为:

int select(int x){
  return (x*(x-1))/2;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM