Я использую Visual C ++ 2017 для создания приложения OpenGL / GLFW.Тем не менее, я получаю сбой в операторе delete[]
с сообщением «HEAP CORRUPTION DETECTECT: [...] CRT обнаружил, что приложение записало в память после завершения буфера кучи».в следующей функции я написал:
#include <direct.h>
void setwd(char **argv)
{
char *buf = new char[strlen(argv[0])];
strcpy(buf, argv[0]);
// Handle both possible separators
char *p = strrchr(buf, '/');
if(!p)
p = strrchr(buf, '\\');
if(p)
{
*(p + 1) = '\0';
_chdir(buf);
}
delete[] buf;
}
Если я удаляю свой вызов на setwd
, все работает нормально.При отладке я убедился, что strlen(argv[0])
никогда не бывает 0.
Стоит отметить, что это прекрасно работает, если скомпилировано с MSYS2 / gcc.