这是我程序中的一项功能。使用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;
}
答案 0 :(得分:6)
i
未初始化,因此访问factors[i]
是未定义的行为,任何事情都可能发生。
此外,factors[i++];
应该做什么声明?
答案 1 :(得分:1)
我对此有同样的想法,因为大多数情况下程序可能正在执行不正确的内存访问:在valgrind下运行它。在程序崩溃之前,Valgrind会为您找到并报告许多常见错误,或者在某些情况下即使它永远不会崩溃。
如果你不能运行valgrind(例如你的平台没有它),你至少可以在调试器中运行你的程序并告诉我们它崩溃了哪条线。