64-битная версия DLL вылетает на свободную память;32-разрядный не - PullRequest
0 голосов
/ 10 октября 2011

Я написал программу на C, которая использует библиотеку NX Open C. Я должен скомпилировать его в .dll, и, как 32-разрядный .dll на 32-разрядной машине, он прекрасно работает. Однако, когда я помещаю тот же код в Visual Studio на 64-разрядную машину и указываю, что он компилируется для 64-разрядной версии, и я запускаю программу, она вылетает в строке, освобождающей часть памяти. Когда я закомментирую эту строку для 64-битной версии, она работает нормально. Документация NX Open указывает, что это память, которую я должен освободить.

Мой вопрос такой: Что вызывает это? Почему программа, закодированная точно так же, вылетает на свободную память в ее 64-разрядной версии на 64-разрядной машине, а не 32-разрядную версию на 32-разрядной машине? Это то, что я должен был ожидать? Я сделал что-то не так, что я могу предотвратить? Или это симптом более серьезной проблемы?

Информация о версии: Я использую Visual Studio 2005, NX 5.0.6.3, Windows XP SP3

1 Ответ

2 голосов
/ 10 октября 2011

Скорее всего, это какая-то ошибка с повреждением памяти. Вы либо:

  • дважды освободить одну и ту же память

  • работа с уже освобожденной памятью (что приводит к повреждению новых выделений памяти)

  • запись вне выделенной памяти (что приводит к повреждению других выделений или структур управления памятью)

Вероятно, ошибка существует и в 32-разрядной версии, но она еще не обнаружена, поскольку она никогда не повреждает важные данные.

Может быть очень трудно найти такую ​​ошибку. Поэтому я рекомендую использовать отладчик памяти, такой как Purify, Valgrind или Insure ++, для определения проблемных мест доступа к памяти.

...