C++ 删除导致分段错误的cout语句
这是我程序中的一个函数。使用cout语句,程序将编译并运行。如果删除cout语句,则返回一个分段错误。我在LinuxMint上使用G++编译器。有人对此有什么想法吗C++ 删除导致分段错误的cout语句,c++,function,for-loop,segmentation-fault,C++,Function,For Loop,Segmentation Fault,这是我程序中的一个函数。使用cout语句,程序将编译并运行。如果删除cout语句,则返回一个分段错误。我在LinuxMint上使用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
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;
}
int findFactors(int n,int factors[],int numFactors)
{
int m=n;
int k=2;
int i;
而(m!=1)
{
因为(k=2;ki
是未初始化的,所以访问因子[i]
是未定义的行为,任何事情都可能发生
另外,语句factors[i++];
应该做什么?i
未初始化,因此访问factors[i]
是未定义的行为,任何事情都可能发生
另外,语句factors[i++];
应该做什么?我在这个问题上的想法与大多数时候程序可能执行错误的内存访问时的想法相同:在valgrind下运行它。valgrind会在程序崩溃之前,或者在某些情况下,即使它从未崩溃,也会为您发现并报告许多常见错误
如果您无法运行valgrind(例如,您的平台没有),您至少可以在调试器中运行您的程序,并告诉我们它在哪一行崩溃。对于这一点,我的想法与大多数时候程序可能执行错误内存访问时的想法相同:在valgrind下运行。valgrind会在程序崩溃之前,或者在某些情况下,即使它从未崩溃,也会为您发现并报告许多常见错误他
如果您无法运行valgrind(例如,您的平台没有),您至少可以在调试器中运行您的程序,并告诉我们它在哪一行崩溃。请包括此函数的调用方式,包括您传递给函数的任何参数的声明。我打赌,您在因子[]的范围之外运行
array。请包括调用此函数的方式,包括传递给函数的任何参数的声明。我敢打赌,您的运行超出了factors[]的范围
array。好的,我初始化了I,这消除了分段错误。我的程序现在出了严重错误,但这个特殊问题已经解决了!我需要记住初始化变量这是我的一个非常坏的习惯。好的,我初始化了I,这消除了分段错误。我的程序现在出了严重错误,但这个特殊的p问题解决了!我需要记住初始化变量,这是我的一个非常坏的习惯。