kirill_782
@kirill_782
Днем я Маринетт

Почему возникает ошибка сегментации?

Есть код
void *operator new( size_t stAllocateBlock ) throw (std::bad_alloc)
{
        void *point = malloc( stAllocateBlock );

        if( point != NULL  )
                BLOCKS[point] = stAllocateBlock;

        return point;
}


Но почему то при перовм new - краш
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
для map к которому Вы обращаетесь вызывается этот же оператор new.
получается Вы обращаетесь к объекту BLOCKS до его создания.
spoiler
#include <cstdio>
#include <cstdlib>
#include <map>
std::map<void*, size_t> BLOCKS;

void* operator new(std::size_t sz) {
    std::printf("global op new called, size = %zu\n",sz);
    void* p = std::malloc(sz);
    //if(p) BLOCKS[p] = sz;
    return p;
}
void operator delete(void* ptr) noexcept
{
    std::puts("global op delete called");
    std::free(ptr);
}
int main() {
     int* p1 = new int;
     delete p1;
}


global op new called, size = 48
global op new called, size = 4
global op delete called
global op delete called
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы