Диалоговое окно появляется, когда выполнение во время выполнения достигает в инструкции free (dat)
Windows вызвала точку останова в файле project.exe. Это может быть связано с повреждением кучи, что указывает на ошибку в файле project.exe или на любую из загруженных DLL файлов.
while(1)
{
char *dat;
std::cout<<"Enter command\n";
memset(command, 0, 30);
std::cin>>command;
m_size = strlen(command)+2;
printf("send data Size: %d\n",m_size);
command[m_size-2] = '\r';
dat = (char*)malloc(m_size);
if(!dat)
{
printf("mem allocation failed");
}
else
{
memcpy(dat,command,sizeof(command));
ok = send_data(dat);
}
if(ok>0)
{
printf("send data: %s\n",dat);
}
free(dat);
}
//Полярный код выглядит так:
int main()
{
char command[30];
While(1)
{....}
return 0;
}
Solution1 Заменить memcpy(dat,command,sizeof(command));
с memcpy(dat,command,m_size);
(Не перезаписывайте выделенный буфер)
Решение2 Или используйте dat =(char *)malloc(sizeof(command));
(Выделите больший буфер, если вы хотите написать больше)
Solution3 После command[m_size-2] = '\r';
, добавьте еще одну строку
command[m_size-1] = '\0'; /* Make it NUL terminated */
И замените memcpy(dat,command,sizeof(command));
с strcpy(dat, command)
(Использовать strcpy вместо memcpy)
Solution4
while(1)
{
std::string command;
std::cout<<"Enter command\n";
std::cin>>command;
command += '\r';
ok = send_data(command.c_str());
if(ok>0)
{
printf("send data: %s\n",dat.c_str());
}
}
Напишите код стиля C++ (std::string
поскольку ваш компилятор C++)
Объем памяти, который вы выделяете для этого dat
- m_size
dat = (char*)malloc(m_size);
Объем памяти, который вы изменяете с помощью dat
- sizeof(command)
memcpy(dat,command,sizeof(command));
Зачем?
Судя по остальной части кода, sizeof(command)
обычно больше m_size
, а это означает, что с помощью этой memcpy
вы перезаписываете свою память и уничтожаете целостность кучи. Следовательно, сбой на free(dat)
.
command
?std::string
и не используйтеmalloc
за исключением взаимодействия с C. Плюс потерять тэг C.