Программа C ++, скомпилированная с Clang, аварийно завершает работу, когда новый оператор перегружен и выводит в std :: cout - PullRequest
0 голосов
/ 13 января 2020

Я использую Clang версии 10.0.0 на Windows 10.

Эта программа

#include <iostream>
// without this operator the program works just fine
void* operator new(std::size_t nrOfBytes) {
    std::cout << "allocate " << nrOfBytes << " bytes on heap" << std::endl;
    void* p = malloc(nrOfBytes);
    if (p) {
        return p;
    } else {
        throw std::bad_alloc{};
    }
}
int main() {
    printf("START\n");
    return 0;
}

вылетает с кодом возврата -1073741819 после компиляции с

clang ++ Main. cpp -std = c ++ 17

Конечно, тот же самый вызов Clang создает безошибочную программу, когда нет перегруженного нового оператора.

Есть намеки?

1 Ответ

4 голосов
/ 13 января 2020

Попробуйте удалить операции cout из «нового». Может быть, для некоторых потоковых операций нужны другие «новые»? ​​

...