程序出现“Expression: _CrtIsValidHeapPoint(pUserData)”时,点击取消进行调试,一运行程序直接退出,无法定位到具体的代码。
网上查了资料,这个错误跟堆有关,找到其中利用堆来分配空间的代码,
char *user_name = new char(20);
char *pass = new char(10);
char *PIN = new char(30);
修改为
char user_name[20];
char pass[10];
char PIN[30];
但是,代码user_name = tmp_username.GetBuffer(uname_len);
Pass=tmp_password.GetBuffer(pass_len);会出现类型不符的情况(char*到char[])。MFC对变量检查的机制比C更严格,虽然可以用类型强制转换来实现数组名到指针的转换,但是更巧妙的方法是把类型转换的问题留给编译器去做。代码修改为,
strcpy(user_name,tmp_username.GetBuffer(uname_len));//CString转换为char类型
strcpy(pass,tmp_password.GetBuffer(pass_len));
在MFC(C++)工程中调用C程序需要格外谨慎。
阅读(1998) | 评论(0) | 转发(0) |