Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态分配阵列,hexa系统_C++ - Fatal编程技术网

C++ 动态分配阵列,hexa系统

C++ 动态分配阵列,hexa系统,c++,C++,我的代码有问题。我不知道,为什么它算错了。 此函数应在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 ?

我的代码有问题。我不知道,为什么它算错了。 此函数应在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); }
CHexNumber CHexNumber::cAdd(CHexNumber*pcOther){
int i_result_len=0;
检查编号c_result(i_result_len);
int i_结果=0;
int i_内存=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;ipi_编号[i]+i_内存;
如果(i_内存>0)
我记得--;
如果(i_结果>=16)
{
i_结果%=16;
i_memory++;
}
c_结果。pi_数[i]=i_结果;
}
返回(c_结果);}
我添加带有输入和输出的屏幕。

Mateusz,在构造函数中,如果更改此值,则忽略传递的参数,并始终将
DEFAULT\u 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);


您还存在其他问题,如内存泄漏和幻数,但我们暂且不谈。

请在使用调试器时包含构造函数,并单步检查代码,是哪条语句导致了问题?该语句中变量的值是什么?CHexNumber::CHexNumber(int-iLen){iLen=DEFAULT_-LEN;vSetNumber(iLen);vSetLength(iLen);}我的意思是在文章中,编辑它并添加构造函数和所有帮助程序。在我看来,你似乎没有正确设置c_结果长度,但在看到完整代码之前我无法判断它的.h和.cpp不起作用:(但我使用了调试器,正如Thomas和我发现的那样,pcOther->pi_编号[I]取值-84215040。这有什么问题吗?除了你总是假设总是有进位之外,这算是一种工作。例如1+2你总是假设结果有两位数,这是不正确的。Uff..这有很多错误;)检查EditsHanks Bartosz,我发现了错误。这是一个关于主要的、简单的错误的糟糕声明。