我的代码有问题。我不知道,为什么它错了。 此函数应在hexa系统上添加两个数字。我在动态分配数组上保留数字。
CHexNumber CHexNumber::cAdd(CHexNumber *pcOther) {
int i_result_len = 0;
CHexNumber c_result(i_result_len);
int i_result = 0;
int i_memory = 0;
i_result_len = (i_len > pcOther -> i_len ? i_len + 1 : pcOther -> i_len + 1);
c_result.vSetLength(i_result_len);
for (int i = 0; i < c_result.i_len; i++)
{
i_result = pi_number[i] + pcOther->pi_number[i] + i_memory;
if (i_memory > 0)
i_memory--;
if (i_result >= 16)
{
i_result %= 16;
i_memory++;
}
c_result.pi_number[i] = i_result;
}
return(c_result); }
答案 0 :(得分:0)
Mateusz,在构造函数中,你忽略了传递的参数,并且总是将DEFAULT_LEN
设置为表达式长度,如果你改变了这个
CHexNumber::CHexNumber(int iLen)
{
iLen = DEFAULT_LEN;
vSetNumber(iLen);
vSetLength(iLen);
}
到这个
CHexNumber::CHexNumber(int iLen)
{
vSetNumber(iLen);
vSetLength(iLen);
}
另一件事是改变这个:
CHexNumber c_b(s_temp.length());
c_a.vSetSign(bCheckNumber(s_temp));
c_a.vChargeArray(s_temp);
c_a.getValue();
进入这个
CHexNumber c_b(s_temp.length());
c_b.vSetSign(bCheckNumber(s_temp));
c_b.vChargeArray(s_temp);
c_b.getValue();
还有这个:
i_result_len = (i_len > pcOther -> i_len ? i_len + 1 : pcOther -> i_len + 1);
c_result.vSetLength(i_result_len);
进入这个:
i_result_len = (i_len > pcOther -> i_len ? i_len + 1 : pcOther -> i_len + 1);
c_result.vSetLength(i_result_len);
c_result.vSetNumber(i_result_len);
你还有其他问题,如泄漏记忆和魔法数字,但现在暂时离开。