C ++ 64bit, переменная не найдена - PullRequest
1 голос
/ 13 марта 2012

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

На моем 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 »not found».Как это возможно?

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

Debug screenshot

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

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

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Есть несколько возможностей для рассмотрения:

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

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

РЕДАКТИРОВАТЬ: поскольку вы говорите, что работаете в режиме отладки, мое следующее предположение заключается в том, что это может быть вызваноповреждением стека.Попробуйте использовать valgrind , чтобы определить, так ли это.Для начала может потребоваться некоторое время, но оно того стоит и определит, есть ли у вас повреждения памяти.

...