сбой приложения при strncpy в VS2008

#visual-studio-2008

#visual-studio-2008

Вопрос:

Я получаю нарушение доступа при 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, а itemLength — это UCHAR.

Во время отладки кода в ассемблерном коде я вижу, что нарушение доступа было зафиксировано при копировании исходной строки во временный буфер. Кто-нибудь может сказать, почему произошло нарушение доступа в strncpy?

Спасибо за любую полезную информацию.

Лакшми.

Комментарии:

1. itemLength действительно является UCHAR? не UCHAR *? Если это так, я действительно считаю, что это проблема…

Ответ №1:

Второй аргумент для strncpy — это местоположение для копирования, и вы, кажется, передаете RdStatShared.Resp.itemLength , что звучит подозрительно как размер чего-то, а не как указатель на буфер символов. Если вы хотите интерпретировать это как таковое, то вам, вероятно, нужно передать указатель на него, а не на саму вещь; т.Е. (char*) amp;(RdStatShared.Resp.itemLength) .

Комментарии:

1. @Hans: да, я не слишком внимательно читал. Вы абсолютно правы.