Удаление оператора cout, вызывающего ошибку сегментации - PullRequest
1 голос
/ 28 марта 2012

Это функция в моей программе.С оператором cout программа компилируется и запускается.Если я удаляю оператор cout, я получаю ошибку сегментации.Я использую компилятор G ++ на Linux Mint.У кого-нибудь есть мысли по этому поводу?

int findFactors(int n,int factors[],int numFactors)
{
  int m=n;
  int k=2;
  int i;

 while(m!=1)
 {
  for(k=2;k<=m;k++)
  {
   if(m%k==0)
    {
      factors[i]=k;
      cout<<"Prime Factor: "<<factors[i]<<endl;//This is the offending statement!
      factors[i++];
      numFactors++;
      break;
    }
  }
   m=(m/k);
 }

  return numFactors;
}   

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

i неинициализирован, поэтому доступ к factors[i] - неопределенное поведение, и может произойти все что угодно.

Кроме того, что должен делать оператор factors[i++];

1 голос
/ 28 марта 2012

У меня такая же мысль, как и в большинстве случаев, когда программа, вероятно, делает неправильный доступ к памяти: запустите ее под valgrind.Valgrind найдет и сообщит вам о многих распространенных ошибках до сбоя вашей программы или, в некоторых случаях, даже если она никогда не выйдет из строя.

Если вы не можете запустить valgrind (например, у вашей платформы его нет),Вы могли бы по крайней мере запустить свою программу в отладчике и сказать нам, на какой линии она падает.

...