有时当我退出我的应用程序(SaviHOST运行我正在制作的DLL)时,我会显示此屏幕:
不幸的是,我不知道错误发生在哪里,因为它只加载了那个屏幕,而不是发生异常的那一行。我该如何解决这个问题?wntdll.pdb与此有什么关系?谢谢
cigdeys31#
要查看代码中的哪一行导致了它,请单击“继续”,然后弹出一个窗口,单击“重试”。示例:
6vl6ewon2#
1.连接到Internet。1.在符号路径设置中启用Microsoft符号服务器。
1.关闭VS(我使用VS 2015)1.重新启动并使用本机进行调试。所有符号都将从MS服务器加载。
pdtvr36n3#
我遇到了同样的错误,结果是我试图删除一个指针,而这个指针没有用类析构函数中的new运算符初始化。
example: class smu { public: smu(); ~smu() { delete voff } private: char* voff; };
svmlkihl4#
设置应用程序使用微软的符号。重建和启动应用程序,它应该加载所有的符号为您,它可能需要一段时间取决于您的互联网屏幕,我自己正在加载所有的符号现在...男孩它需要时间!
6jjcrrmo5#
我在一个非基于Web的应用程序中遇到了同样的问题。我非常生气,但结果发现这是我的一个类的析构函数中的一个小逻辑和语法错误。以下是代码:
// Constructor // StatusTrigger_Manager::StatusTrigger_Manager( bool isCreator,unsigned short desiredMemberCount ) { maxMembers = desiredMemberCount; memberHoldersRequired = ( maxMembers / 32 ) + 1; memberHolders = new unsigned int[ memberHoldersRequired ]; for ( unsigned short index = 0; index < memberHoldersRequired; index++ ) { memberHolders[ index ] = 0; } // if ( isCreator ) { stringList = new STRINGLIST_STATUSTRIGGERS[ maxMembers ]; // Initialize 'stringList' members to default names unsigned char memberName_ValueOffset = 7; for ( unsigned int index = 0; index < maxMembers; index++ ) { // Set current member name to default stringList[ index ].memberName = new char[ 14 ] { "Member_00000\0" }; unsigned short individualVal = 0; unsigned short valDivider = 10000; unsigned int tempIndex = index; for( unsigned char i = 0; i < 5; i++ ) { individualVal = ( index / valDivider ) + 48; stringList[ index ].memberName[ i + memberName_ValueOffset ] = individualVal; tempIndex -= ( individualVal - 48 ) * valDivider; valDivider /= 10; } tempIndex = 0; } } else stringList = nullptr; } // Destructor // StatusTrigger_Manager::~StatusTrigger_Manager() { if ( stringList != nullptr ) { delete[] &stringList[ 0 ].memberName; stringList[ 0 ].memberName = nullptr; } if ( memberHoldersRequired == 1 ) delete memberHolders; else if ( memberHolders != 0 ) delete[] memberHolders; }
这是在修正了dll问题和内存泄漏问题之后的析构函数。小的改变--但是头发现在又长回来了。
// Destructor // StatusTrigger_Manager::~StatusTrigger_Manager() { if ( stringList != nullptr ) { for ( unsigned int index = 0; index < maxMembers; index++ ) { delete[] stringList[ index ].memberName; stringList[ index ].memberName = nullptr; } } if ( memberHoldersRequired == 1 ) delete memberHolders; else if ( memberHolders != 0 ) delete[] memberHolders; }
当同样的问题在调试模式下没有发生时,我得到了提示-通常是由于只在调试模式下设置为默认值的变量未初始化而导致的,或者根据我的经验,未能正确删除数组。希望它能有所帮助。祝你好运。
5条答案
按热度按时间cigdeys31#
要查看代码中的哪一行导致了它,请单击“继续”,然后弹出一个窗口,单击“重试”。
示例:
6vl6ewon2#
1.连接到Internet。
1.在符号路径设置中启用Microsoft符号服务器。
1.关闭VS(我使用VS 2015)
1.重新启动并使用本机进行调试。所有符号都将从MS服务器加载。
pdtvr36n3#
我遇到了同样的错误,结果是我试图删除一个指针,而这个指针没有用类析构函数中的new运算符初始化。
svmlkihl4#
设置应用程序使用微软的符号。重建和启动应用程序,它应该加载所有的符号为您,它可能需要一段时间取决于您的互联网屏幕,我自己正在加载所有的符号现在...男孩它需要时间!
6jjcrrmo5#
我在一个非基于Web的应用程序中遇到了同样的问题。我非常生气,但结果发现这是我的一个类的析构函数中的一个小逻辑和语法错误。以下是代码:
这是在修正了dll问题和内存泄漏问题之后的析构函数。小的改变--但是头发现在又长回来了。
当同样的问题在调试模式下没有发生时,我得到了提示-通常是由于只在调试模式下设置为默认值的变量未初始化而导致的,或者根据我的经验,未能正确删除数组。希望它能有所帮助。祝你好运。