ESP在函数调用中没有保存/运行时错误#0
ESP Not saved across function call / Runtime Error #0
我得到一个奇怪的错误,抱怨堆栈损坏我假设,我已经调试了一点,但我还没有发现这个问题。我似乎也无法在Visual Studio 2010中实现nothrow !
XYZ::XYZ(char * d)
{
hostname = new char[HOSTNAME_LENGTH];
ip = new char[IP_ADDR_LENGTH];
/*Dynamic Memory*/
memset(hostname, 0, HOSTNAME_LENGTH);
memset(ip, 0, IP_ADDR_LENGTH);
//strncpy(hostname, d, HOSTNAME_LENGTH);
if(dWSAStartup(MAKEWORD(2,2), &wsd) == 0) //Crashes Here!
//And so on..
dWSAStartup从ws2_32.dll动态链接,并具有正确的函数参数类型转换:
typedef int (*WSAS)(WORD, LPWSADATA); //WSAStartup
没有,FreeLibrary函数没有被调用——所以函数指针是有效的!
这个bug是唯一阻止我的东西!有人能给我扔个指针吗?typepedef int (*WSAS)(WORD, LPWSADATA);//WSAStartup
这是错误的,调用约定丢失了。它默认为__cdecl,这与winsock2.h中的声明方式不同。这就是为什么你得到运行时诊断,在调用之后,它从堆栈弹出参数,一些已经由WSAStartup()完成的事情。结果是一个不平衡的堆栈。解决办法:
typedef int (__stdcall * WSAS)(WORD, LPWSADATA); //WSAStartup
实际使用的声明器是FAR PASCAL,网络api强烈保留了上个世纪的内容。如果没有自动生成的调试代码,不平衡的堆栈是非常难以诊断的。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 尝试将数据保存到数组中时出现ifstream运行时错误
- 成员函数指针运行时错误——ESP的值在函数调用中没有正确保存
- ESP在函数调用中没有保存/运行时错误#0