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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.