2012-03-13 2 views
1

У меня проблема с моим C++-приложением. Он был разработан на 32-битном ПК, на Microsoft Visual Studio 2008, и теперь я пытаюсь запустить его на 64-битном компьютере.C++ 64bit, переменная не найден

На моем 32-битном ПК он работает нормально; на 64-битном ПК Visual Studio не дает никакой проблемы с компиляцией, но затем при выполнении дает неправильные результаты. И я понял, почему.

В коде я определяю переменную типа «dag», которая представляет собой структуру для прямого ациклического графа. При отладке программного обеспечения, я заметил, что, хотя я и объявил его, позже программное обеспечение не может вставлять данные в нем, и отладчик говорит:

CXX0017: Error: symbol "dags" not found 

Вот мой код:

Dag<int64_t>* dags = new Dag<int64_t>(); 
    dags = getDagsFromRequest2(request, dags); 

очень странно, что если я следую потоку внутри функции getDagsFromRequest2(), я могу ясно видеть, что переменная dags полна данных: на «quickwatch» она показывает 2342 узла внутри нее. Но когда я вернусь из функции getDagsFromRequest2() в эту часть кода, отладчик говорит: «CXX0017: Ошибка: символ« dags »не найден». Как это возможно?

Вы также можете увидеть этот снимок экрана из моего отладочного набора Visual Studio.

Debug screenshot

Что может быть проблема?

Большое спасибо

+0

Я думаю, что это просто проблема с отладкой (возможно, причина релиза), это не влияет на поведение приложения. –

+0

У вас есть возможная утечка памяти.Сначала вы выделяете память указателю, затем вы переписываете указатель, указывая на какую-то другую память. –

+0

@ DavideChicco.it нет, он должен быть отлажен. Но я думаю, что у вас должно быть только два варианта режима сборки: Release и debug (я никогда не видел Debug-x64). Также aparantly это проблема отладчика, поскольку ваш код компилирует –

ответ

3

Есть несколько возможностей, чтобы рассмотреть следующие вопросы:

  1. Запуск в версии сборки. Переключитесь на сборку Debug.
  2. Использование отладочной сборки с включенной и/или отладочной информацией об оптимизации. Отключите оптимизацию и включите отладочную информацию (смотрите в другом проекте для соответствующих настроек).
  3. Коррумпированная конструкция. Очистите и перестройте все решение.
  4. Повреждение памяти, которое препятствует отображению переменной отладчика. Убедитесь, что проблем с памятью не существует с помощью инструмента, такого как Valgrind.
  5. Ошибка VS. This report для VS2010, кажется, предлагает известную ошибку с аналогичными характеристиками, например. Убедитесь, что все исправления и исправления для VS2008 установлены.
+0

Thanx Uesp. 1: Просто попробовал, он не работает. 2: Как? 3: Я очистил и перестроил, но он не работает. 4: Как Valgrind мог помочь мне? 5: На самом деле это могло бы быть ... –

+0

Я бы поместил свои деньги на этом в качестве ошибки, было несколько случаев, когда я столкнулся с этим (как на C++, так и на C#) – Necrolis

+0

Если вы перейдете в Project-Properties дважды проверьте, что в вашей сборке Debug64 под C/C++ все оптимизации отключены (/ Od) как минимум. Если это связано с повреждением памяти, то Valgrind может обнаружить это. Другой вариант - записать вывод отладки в консоль или файл и использовать несколько операторов printf() (или аналогичных). Если это хорошо работает, то проблема почти наверняка будет VS. – uesp

1

переменная группы DAG определяется как ваш код компилируется. Ошибка, которую вы видите, просто связана с отладчиком. Я предполагаю, что это вызвано запуском приложения в режиме Release, которое иногда вызывает непонятные и неправильные значения часов. Попробуйте изменить режим для отладки (есть выпадающий список, из которого вы можете выбрать режим сборки).

EDIT: как вы говорите, вы работаете в режиме отладки, моя следующая догадка заключается в том, что это поведение может быть вызвано повреждением стека. Попробуйте использовать valgrind, чтобы определить, действительно ли это так. Для начала может потребоваться некоторое время, но оно того стоит и обнаружит, есть ли у вас повреждение памяти.

+0

Thanx Izomorphius, но я работаю в режиме Debug-x64. –

+0

Я добавил еще одну идею о том, что может быть вашей проблемой. Боюсь, я не могу дать больше вариантов без дополнительного контекста. –

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