Сбой программы при вроде бы удачном удалении [] - PullRequest
1 голос
/ 21 мая 2019

Я использую 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.

1 Ответ

1 голос
/ 21 мая 2019

Вам нужен один дополнительный символ в буфере для нулевого терминатора: new char[strlen(argv[0])+1]

...