2011-05-02 73 views
0

在下面的代码中,我在strncpy中遇到访问冲突。VS2008的strncpy中的应用程序崩溃

if(WaitForSingleObject(RdStatShared.hMutex, INFINITE) == WAIT_OBJECT_0) 
{ 
    if(RdStatShared.Resp.itemLength != NULL) 
    {     
     strncpy((char*)TData[53], (char*)RdStatShared.Resp.itemLength, (size_t)0x01); 
    } 
    ReleaseMutex(RdStatShared.hMutex); 
} 

RdStatShared是跨项目使用的共享对象。由于它是随机更新的,我想在读取对象之前锁定对象。 TData是长度为1024的BYTE类型,itemLength是UCHAR。

在调试代码时,在汇编代码中,我看到将源字符串复制到临时缓冲区时发生访问冲突。 任何人都可以告诉为什么访问冲突发生在strncpy?

感谢您提供任何有用的信息。

Lakshmi。

+1

itemLength真的是UCHAR?不是UCHAR *?如果是这样,我确实认为这是问题... – 2011-05-02 21:06:22

回答

2

的第二个参数是strncpy复制到的位置,你好像路过RdStatShared.Resp.itemLength,这听起来很像的东西大小,不是像一个指向字符缓冲区。如果你想解释它,那么你可能需要传递一个指针,而不是事物本身;即,(char*) &(RdStatShared.Resp.itemLength)

+1

第一个说法也是错误的,它应该是&TData [53]。 – 2011-05-02 23:37:14

+0

@Hans:是的,我没有仔细阅读。你是绝对正确的。 – 2011-05-02 23:46:42