LINUX.ORG.RU

C++ функция получает не те значения которые ей передавались


0

0
Есть код:

double observArrL[((numDir + 1))];
double observArrR[((numDir + 1))];
double directArr[numDir + 1];

QTableWidgetItem *obsItem = new QTableWidgetItem;

for(int i = 0; i < ((numDir + 1) * 2); (i=i+2)){

obsItem = logMetering->item(i , 0);
observArrL[i] = DegToDig(obsItem->text());

obsItem = NULL;
}


for(int i = 1; i < ((numDir + 1) * 2); (i=i+2)){

obsItem = logMetering->item(i , 0);
observArrR[i] = DegToDig(obsItem->text());

obsItem = NULL;

}


calcMdir(observArrL, observArrR, (numDir + 1), directArr);

и код функции calcMdir:

for(int i = 0; i < size; i++){

directArr[i] = (observArrL[i] + observArrR[i] - 180) / 2;

}

Вопрос в том что когда я проверяю значения массивов observArr они верны, а когда я проверяю их значения уже в функции calcMdir то последнии два значения массива совершенно не те что должны быть. Скорее всего где-то туплю я, но ни как не могу найти где. Укажите плиз на ошибку или подскажите куды копать.
Видя это:

double observArrL[((numDir + 1))];

и это:

for(int i = 0; i < ((numDir + 1) * 2); (i=i+2)){ observArrL[i] = DegToDig(obsItem->text());

я удивляюсь как оно вообще работает :-)

smh ★★★
()
Ответ на: комментарий от Artem_Korneev
int calcMdir(double *observArrL, double *observArrR, const int size, double *directArr);
XtouRusX
() автор топика
Ответ на: комментарий от smh
каким образом оно выходит? Тем более если оно и выходит за пределы я думаю значения в массиве должны быть верными, или я не прав?
XtouRusX
() автор топика
Ответ на: комментарий от XtouRusX
нубы обычно читают K&R перед тем как лезть на форум и задавать тупые вопросы, которые разжеваны на первой же странице, посвященной указателям
Reset ★★★★★
()
Ответ на: комментарий от XtouRusX
1. У тебя массив размера ((numDir + 1)
2. Индекс бежит до ((numDir + 1) * 2 и естественно ты срешь в чужую память
3. Ты создаешь динамические массивы с помощью C99, который не является частью C++. В msvs такое работать не будет.
Reset ★★★★★
()
Ответ на: комментарий от Reset
Блин!!!! Этого я не заметил. (numDir + 1) * 2 осталось от старого варианта и я про него забыл совчем, а потом както внимания не обращал. Спасибо! И мой вопрос кстати был не про работу с указателями и книгу я прочитал, а именно ткнуть носом в ошибку, которую я не мог найти потому как читая одно и то же иногда уже машинально пропускаешь некоторые куски в которых и может быть ошибка.
XtouRusX
() автор топика
Ответ на: комментарий от XtouRusX
Все, понял, вместо i нужно еще один счетчик использовать, чтобы он бежал до numDir + 1 и увеличивался не два а на один.
XtouRusX
() автор топика
Ответ на: комментарий от XtouRusX
>каким образом оно выходит?
вот таким: for(int i = 0; i < ((numDir + 1) * 2); (i=i+2))

>Тем более если оно и выходит за пределы я думаю значения в массиве должны быть верными, или я не прав?

ты не прав!
xydo ★★
()
Ответ на: комментарий от xydo
> The behavior is undefined

Обожаю эту фразу!

const86 (*) (22.04.2009 9:46:33)

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.