CYGWIN: Переменные в памяти самопроизвольно меняют значения - PullRequest
0 голосов
/ 25 апреля 2011

Некоторые из моих переменных меняют значения, казалось бы, неоправданно, когда я изменяю другие переменные в своем коде c ++.Я использовал gdb для аппаратного наблюдения за рассматриваемой памятью, и это произойдет, даже когда я просто косуюсь << "bla";</p>

Если кто-нибудь может предложить ЛЮБЫЕ предложения относительно того, как это исправить, это будет с благодарностью!Я в тупике!

Когда я запускаю пример программы максимальной памяти, предоставленной в документации cygwin, мне говорят, что у меня есть 1,5 ГБ доступной оперативной памяти (этого должно быть достаточно для объема этой программы).

Ответы [ 2 ]

3 голосов
/ 25 апреля 2011

Наиболее вероятной причиной "самопроизвольного" изменения значения переменной является переполнение буфера. Следующая наиболее вероятная причина - повреждение кучи (или использование памяти после того, как она была free() d или delete d (также известная как зависшая память)).

Вы не сказали, являются ли переменные глобальными, распределенными или локальными. Я предполагаю, что выделена куча, и в этом случае теория висячего является наиболее вероятной - все, что может законно выделить память (например, cout), может захватить и изменить память, которую вы освободили с помощью free или delete.

2 голосов
/ 25 апреля 2011

Вы пытались использовать valgrind для проверки ошибок памяти в вашем коде?

...