春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0

今天在进行memcpy出现了一些问题。
原因是这样的:
我定义了这样一个接口,里面涉及memcpy操作。

举个例子吧,如接口addItem,
void addItem(int iType, LPVOID *pItem);

里面有一个对象是TCHAR szStr[512];
我直接进行了这样的拷贝,memcpy(szStr, pItem, sizeof(szStr));
今天就出问题了。提示某块内存无法访问。于是重新看这个问题。为什么会这么写这样的接口呢?
我原先写的是 void addItem(int iType, TCHAR *pItem);
后来由于需求的变化,变成了LPVOID。改成这个以后,原先的字符串wcscpy就变成了memcpy。这个一直没有引起警觉。其实这一步的改变,就应该对接口做相应的调整,接口应该变为
void addItem(int iType, LPVOID *pItem, DWORD cbItem);
增加一个参数来说明pItem的大小。然而这一步没有做。

所以今天的教训就是要注意修改接口的时候,注意相应的变化。

还有是字符串的操作问题,宽字符和ASCII字符串的操作要注意。

posted on 2009-07-29 11:58 Sandy 阅读(142) 评论(0)  编辑 收藏 引用 所属分类: 日常总结

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理