【发布时间】:2014-05-12 14:23:07
【问题描述】:
已解决!我发现了我的错误......我在最后发布了我的解决方案。很抱歉浪费了时间。
我已经有一段时间没有玩过 c++ 了。它从来都不是我的主要语言,所以我不熟悉细节。我有一个奇怪的错误弹出。当我调用 factorize() 时,它正在重置数字的符号。尽管标志从未被触摸过。
我找到了解决办法。在我的工作代码中,我添加了一个整数来保留和重置该值,但我认为我不应该这样做。我从下面的代码示例中删除了这两行。
我重置标志的地方: 此类的构造函数将符号设置为 0。它可以在 * 和 *= 运算符中设置为 0(如果它们都具有相同的符号)。仅当将 (unsigned long long) 值分配给对象时, = 运算符才将其设置为零(如果将其设置为等于另一个 FactorNumber,它会保留符号)。
就是这样。这些是我将符号设置为零的唯一地方。我不明白为什么这个函数会调用其中的任何一个。但是,我并不真正了解 c++ 在处理类时如何做事的细节。我不明白为什么符号不断重置为 0,但也许我做错了什么。有人知道为什么会这样吗?
class FactorNumber {
private:
unsigned long long number;
unsigned long long factor_list[63]; // this is the max possible amount
int number_of_factors;
int sign; // 0=positive 1=negative
void factorize();
[snipped irrelevant public function calls]
};
void FactorNumber::factorize() {
int x=0;
for(x=0;x<64;x++) {
factor_list[x]=0;
}
number_of_factors=0;
unsigned long long current_factor=2; // 64 bits in c++
unsigned long long current_number=number;
unsigned long max_factor=0; // can never be more than 32 bits
if (number>3) {
max_factor=sqrt(current_number);
while (current_factor<=max_factor) {
if(current_number%current_factor) {
if(current_factor>2) {
current_factor+=2;
} else {
current_factor=3;
}
} else {
factor_list[number_of_factors++]=current_factor;
current_number=current_number/current_factor;
if(current_number%current_factor) {
max_factor=sqrt(current_number);
}
}
}
// If there is a number larger than one, add it to the array.
if(current_number>1) {
factor_list[number_of_factors]=current_number;
} else {
number_of_factors--; // If not, we ignore this last number
}
} else {
number_of_factors=0;
factor_list[0]=number;
}
}
我的错误是一个obiwan错误。我正在写超过我的数组的末尾(factor_list[63] 实际上并不存在),那是覆盖我的数据。只是巧合,这个重置标志并没有搞砸其他东西(或者可能是这样,但我还没有抓住它)。这就是我问这个问题的原因。并不是我无法解决它,我知道我的代码中某处存在错误。
将 for 循环条件更改为 x
【问题讨论】:
-
factor_list一直到索引 62,而您在factor_list中的第一个for中一直到索引 64 -
嗨,Brunk,请将解决方案添加为 Answer。
-
@brasofilo 已经有 2 个答案了:)
-
@IosifMurariu,没问题;)...但问题不是发布答案的地方。如果 OP 不这样做,正常程序是回滚问题并将答案发布为社区 Wiki。
-
我不能在 8 小时内发布答案,因为我在这里太新了。编辑原始问题是我提醒人们问题已解决的最快方法。 8小时过去了,我会在适当的地方写一个答案。
标签: c++ function class variables