Я получаю нарушение прав доступа к массиву символов, который только что создал с помощью new
.
DispatchCommand(char* cmdStr)
{
// Dispatch
for(int i = 0; i < sizeof(_lpCommands); i++)
{
const int len = strlen(_lpCommands[i].szCommand);
char* cmdblip = new char[len + 1];
memcpy(&cmdblip, cmdStr, len);
cmdblip[len] = '\0'; // Access Violation
if(strcmp(cmdblip, _lpCommands[i].szCommand) == 0)
{
if(strlen(cmdStr) > strlen(_lpCommands[i].szCommand))
(*_lpCommands[i].cbCallback)(&cmdStr[strlen(_lpCommands[i].szCommand)]);
else
(*_lpCommands[i].cbCallback)("");
delete cmdblip;
return;
}
delete cmdblip;
}
// Error and return
*Out::ServerInfo<<"Command not found!"<<ENDL;
}
_lpCommands — это массив из Command
структур:
struct Command
{
char* szCommand;
CommandCallback cbCallback;
};
Произведенное сообщение об ошибке:
Необработанное исключение по адресу 0x012219cf в Program.exe: 0xC0000005: место записи нарушения прав доступа 0x66647366.
Это был переписанный аналогичный код, в котором использовалось memcmp
, что в конечном итоге привело к нарушению прав доступа без выполнения memcpy
.
Что дает?
std::string
? И у вас есть неопределенное поведение вdelete cmdblip;
. Должно бытьdelete [] cmdblip;
. - person Fred Larson   schedule 27.06.2012std::string
, старайтесь держаться подальше отchar*
! - person Fred Larson   schedule 27.06.2012std::string
слишком локализовано. Этот код — фугли, и тот факт, что он содержит ошибки, является прямым следствием того факта, что ваш код ужасно отстойный, а не какой-то конкретный экземпляр отстойного. - person Puppy   schedule 27.06.2012