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

Removing cout statement causing segmentation fault

本文关键字:错误 cout 语句 分段 删除      更新时间:2023-10-16

这是我程序中的一个函数。有了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;
}   

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

另外,语句factors[i++];应该做什么?

我对此有着与大多数程序可能进行错误内存访问时相同的想法:在valgrind下运行它。Valgrind会在程序崩溃之前为您发现并报告许多常见错误,或者在某些情况下,即使它从未崩溃。

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