2015-10-26 3 views
0

У меня проблема с моим кодом. Я не знаю, почему это считается неправильным. Эта функция должна добавить два номера в систему гекса. Я сохраняю номера в динамических массивах распределения.Динамические массивы распределения, система гекса

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); } 

Я добавляю экран с выходом и выходом. http://screenshooter.net/102563004/tumxpyx

+0

Просьба включить конструктор –

+1

Когда вы использовали отладчик и один шаг через ваш код, какой оператор вызывает проблему? Каковы значения переменных в этом выражении? –

+0

[изменить] CHexNumber :: CHexNumber (int iLen) { \t iLen = DEFAULT_LEN; \t vSetNumber (iLen); \t vSetLength (iLen); } – john123

ответ

0

Матеуш, в конструкторе, вы игнорируете передается аргумент и все дни установления 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); 

У вас также есть другие проблемы, такие как утечка памяти и магические числа, но давайте оставим ее на данный момент.

+0

it doesn 't work :(но я использовал отладчик, как сказал Томас, и я обнаружил, что pcOther-> pi_number [i] принимает значение -842150450. Что может быть неправильным с этим? – john123

+0

Это своего рода работа, кроме того, что вы всегда предполагаете что всегда есть перенос. Например, 1 + 2, вы предполагаете, что результат имеет 2 цифры, что неверно. –

+0

Уфф .. это много ошибок;) проверить на изменения –

Смежные вопросы