删除导致分段错误的cout语句

时间:2012-03-27 22:33:23

标签: c++ function for-loop segmentation-fault

这是我程序中的一项功能。使用cout语句,程序编译并运行。如果我删除cout语句,我会返回一个分段错误。我在linux mint上使用G ++编译器。有人对此有什么想法吗?

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 个答案:

答案 0 :(得分:6)

i未初始化,因此访问factors[i]是未定义的行为,任何事情都可能发生。

此外,factors[i++];应该做什么声明?

答案 1 :(得分:1)

我对此有同样的想法,因为大多数情况下程序可能正在执行不正确的内存访问:在valgrind下运行它。在程序崩溃之前,Valgrind会为您找到并报告许多常见错误,或者在某些情况下即使它永远不会崩溃。

如果你不能运行valgrind(例如你的平台没有它),你至少可以在调试器中运行你的程序并告诉我们它崩溃了哪条线。