hur.cn - 华软网

 热门搜索

关于memset的奇怪问题

  作者:未知    来源:网络    更新时间:2011/5/26
晚上我发了http://topic.csdn.net/u/20110526/20/c928877c-8abf-4563-82f1-5b22883d0e36.html?992

这是vc6做的dll文件,多线程socket

这个问题找到原因了
char m_WndName[256];
//memset(m_WndName,0,sizeof(m_WndName)); //加上这一句就出错

想不通原因,求高高手来解释下

如果你想调试,可以到那个帖子里下载,调试
只需要把几个文件中的RtlZeroMemory注释掉即可生成release版本的dll文件
---华软 网友回答---
程序是在32位系统上运行吗?
sizeof(m_WndName) 是否 等于 256?
---华软网友回复---
应该没有问题啊,可能是你其它的地方出错了吧,看看是不是其它地方指针越界或者数组溢出了。。。
---华软网友回复---
现在只是编辑,vc6的程序只能在32位系统上运行
sizeof(m_WndName)肯定等于256,即使把这句直接换成256错误也一样
引用 1 楼 jixiang1983 的回复:
程序是在32位系统上运行吗?
sizeof(m_WndName) 是否 等于 256?



我也觉得很简单,不应该出的问题,但事实上就有问题,郁闷啦
引用 2 楼 visualeleven 的回复:
应该没有问题啊,可能是你其它的地方出错了吧,看看是不是其它地方指针越界或者数组溢出了。。。

---华软网友回复---
顶一下,加个分,找原因
---华软网友回复---
出错的时候,查看一下数组的内存空间数据
---华软网友回复---
不是编辑出错,而是连接有错
Generating Code...
Linking...
   Creating library Release/PlusSock.lib and object Release/PlusSock.exp
MyThreadFunc.obj : error LNK2001: unresolved external symbol _memset
../Bin/Release/Plug/PlusSock.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

PlusSock.dll - 2 error(s), 0 warning(s)
---华软网友回复---
连接错误,和编译没关系的,查看下是不是基本的库在你的DLL中没包含,memset.h是vc的基础库,是不是你的工程没导入,可以include <memset.h>检查是否能打开此.h。如果不行,检查工程路径。memset这样用法肯定没错
---华软网友回复---
#include<memory.h>
---华软网友回复---
是不是忽略的某些库?
---华软网友回复---
是不是你的项目里面没有包含基础库
#include
<memory.h> or <string.h>
试试
---华软网友回复---
引用楼主 flyskytoday 的回复:
晚上我发了http://topic.csdn.net/u/20110526/20/c928877c-8abf-4563-82f1-5b22883d0e36.html?992

这是vc6做的dll文件,多线程socket

这个问题找到原因了
char m_WndName[256];
//memset(m_WndName,0,sizeof(m_WndName)); //加上这一句就出错……
我认为m_WndName是一个char指针,你用memset把本已分配地址的指针清为零了,当然会出错呀,也即m_WndName==NULL.
---华软网友回复---
唉, 算了吧, 用ZeroMemory代表memset就是了, 假如为windows下用的话
---华软网友回复---
link出错的话应该是你CRT的导入库没有加进去,或者就是c/c++的静态库没加进去。你看看工程属性里面配置属性->c++->命令行里面有没有包含/MT,/MTd,/MD,/MDd中的一项,如果没有的话自己随便加一个看看。
---华软网友回复---
我觉得不会是在memset出错吧,你挂也应该是在后面挂的,多半哪个地方访问了什么值,为0就会有问题。
---华软网友回复---
谢谢大家提出的解决问题思路与办法

不过我想问问你们把这个工程下载试了吗

什么缺少头文件,加lib库包括工程中的设置mt,mtd模式(也可能我做得不正确)在昨晚都试了,但还未得到正确的结果

还有,看清楚了,在debug模式下是没问题,在release模式下才出现memset的问题,编辑没问题,连接才有问题
---华软网友回复---
memset(m_WndName,0,sizeof(char)*256); 
---华软网友回复---
编译通过,单步调试
---华软网友回复---
为什么在我的系统上编译的是无法解析外部符号,不知道你的错误是这个?
---华软网友回复---
char m_WndName[256] = {0};
???
---华软网友回复---
为啥我一打开就是
The following error has occurred during XML parsing:

File: C:\Documents and Settings\Administrator\桌面\dllSock\PlusSock.vcproj
Line: 8
Column: 2
Error Message:
'9.00' 违反了 '7.00 7,00 7.10 7,10 8.00 8,00' 的 enumeration 约束。
无法分析值为 '9.00' 的属性 'Version'。

The file 'C:\Documents and Settings\Administrator\桌面\dllSock\PlusSock.vcproj' has failed to load.
---华软网友回复---
楼上的是什么版本?
---华软网友回复---
引用 20 楼 kyotrue 的回复:
为啥我一打开就是
The following error has occurred during XML parsing:

File: C:\Documents and Settings\Administrator\桌面\dllSock\PlusSock.vcproj
Line: 8
Column: 2
Error Message:
'9.00' 违反了 '7.00 7,00 7.……

---华软网友回复---
在工程的配置里,Linker -> Ignore All Default Libraries 是 YES 吧,
---华软网友回复---
引用楼主 flyskytoday 的回复:
char m_WndName[256];
//memset(m_WndName,0,sizeof(m_WndName)); //加上这一句就出错……


改成 char m_WndName[256] = {0}; 试试
---华软网友回复---
引用 6 楼 flyskytoday 的回复:
不是编辑出错,而是连接有错
Generating Code...
Linking...
   Creating library Release/PlusSock.lib and object Release/PlusSock.exp
MyThreadFunc.obj : error LNK2001: unresolved external symbol _memset
../Bin/R……

包含memset函数的库没链接上,应该是没有包含头文件吧。
建议直接用关键字new
char *m_WndName = new char[256];
在程序结束的时候用
delete [] m_WndName;
这个比memset要好用的多。
---华软网友回复---
回复 下载下来看看
---华软网友回复---
我下载了您的程序,把Linker -> Ignore All Default Libraries的钩划掉后,编译正常
---华软网友回复---
应该修改为:
char m_WndName[256];
memset(m_WndName,0,256)//加上这一句就出错

---华软网友回复---
不用去掉Ignore All Default Libraries的钩
把MSVCRT.LIB添加到导入库里也编译成功
---华软网友回复---
//memset(m_WndName,0,sizeof(m_WndName)); //加上这一句就出错
这句写成memset(m_WndName,0,sizeof(m_WndName[0])*256),原因是操作系统有考虑效率会有内存对齐问题.
---华软网友回复---
把c++选项中minisize改成默认的maximize speed就正常了。

---华软网友回复---
每天回帖
---华软网友回复---
/memset(m_WndName,0,sizeof(m_WndName)); //加上这一句就出错
memset(m_WndName,0,256*sizeof(char));
---华软网友回复---
是不是相关的头文件没包含,你出错的提示也没有告诉呀
---华软网友回复---
加上库就行了。编译上面的问题,没有什么好讨论的。
---华软网友回复---
MyThreadFunc.obj : error LNK2001: unresolved external symbol _memset
这个错误基本就是库没被加载上导致的
---华软网友回复---
这跟memset没什么关系,就是库的问题。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。