#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: да, я не слишком внимательно читал. Вы абсолютно правы.