| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Локальная переменная меняет знач. "сама" |
| Автор: DanilSoldatov 12.8.2008, 09:26 | ||||
| Здравствуйте! Пишу прогу на Си и иногда встречаюсь с такой ситуацией, что локальная переменная меняет свое значение "сама по себе". Ну т.е. явно я ей ничего не присваиваю, а значение "чудесным образом" меняется Вот фрагмент Си-шного кода, где переменная delta неожиданно меняет свое значение:
Код ф-ции DateTimeFromArray следующий(эта ф-ция берет из байтовой послед-ти 12 байтов - дату и время, хотя это неважно
|
| Автор: Daevaorn 12.8.2008, 09:32 |
| Ужасный код. Куча магических чисел и разный стиль именования идентификаторов. А то что переменная вдруг меняет своё значения - виноват автор кода. Он явно так сильно "химичит" с памятью, что просто выходит за границы массива где-то и портит стек. |
| Автор: Torsten 12.8.2008, 09:33 |
| DanilSoldatov, пустой код, потому что о типах ни слова и их размеров и много магических чисел. Вообще у меня была такая байда из-за компилятора старого и буста, но это С++. У тебя же судя по всему при работе с массивом проблемы. Если ты точно локализовал функцию, в которой значение меняется, сделай трассировку, чтобы определить строку, в которой происходит изменение. Для начала советую присмотрется к aData и размеру этой строки. |
| Автор: Torsten 12.8.2008, 11:21 |
Даже более, она передается по значению и копируется. Это не ссылка и не указатель. а вот это уже тебе нужно узнать что не так Я лишь выдвинул предположение. Не факт, что это строка имеет длину > 11. |
| Автор: xvr 12.8.2008, 14:03 | ||
|
| Автор: DanilSoldatov 12.8.2008, 14:33 | ||
А вот єто уже по сути, спасибо, я уже нашел |
| Автор: ksili 12.8.2008, 15:07 |
| vResultBuf это получается char*. А память под массив на который он указывает, нигде не выделяется |
| Автор: Supersedes 13.8.2008, 08:18 | ||||
В 5-й строке она тоже сама себя прописала!? |
| Автор: ksili 13.8.2008, 08:56 |
| Supersedes, ты комментарии-то в коде читал? |
| Автор: MastEdm 13.8.2008, 21:41 |
| Лучше, конечно, код переписать. А если лениво, то в дебагере делай breakpoint на 8 строчку, а потом watch на память, выделенную под delta. Как только её кто-то поменяет, дебагер тебе об этом сообщит. |
| Автор: Supersedes 14.8.2008, 14:21 |
| ksili, нет. Щаз прочитаю.. |