Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80574
  • 博文数量: 19
  • 博客积分: 1635
  • 博客等级: 上尉
  • 技术积分: 231
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-18 08:13
文章分类

全部博文(19)

文章存档

2013年(1)

2012年(7)

2011年(3)

2010年(3)

2008年(5)

我的朋友

分类: C/C++

2013-01-12 19:05:48

程序出现“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) |
0

上一篇:Linux RCU 回调函数

下一篇:没有了

给主人留下些什么吧!~~