среда, 16 июня 2010 г.

И снова, и снова, и снова - GCC

Многие (жаль, что не все) программисты, которые используют С++, знают, что нельзя память, выделенную malloc`ом освобождать через delete.
Ну не то, чтобы запрещенно было (в стандарте как всегда прописано - undefined behavior)... Ну не то, чтоб не работало - под VS 2005/2008 прекрасно бегал такой кусок кода (жаль, не могу познакомиться с автором). Да вот незадача - при компилировании такой лажи GCC 2.95.2 компилятор выдаёт невнятное сообщение и тихонько замолкает.
Убил полдня на вот такую "да_это_же_все_знают" хрень.

3 комментария:

  1. По іронії долі сьогодні вовтузюся з потрійним виділення пам’яті для якогось нещасного тексту:

    1) json_dump() повертає char*, який треба звільнити функцією ::free().
    2) Той самий char* має бути всередині відфутболений як std::string.
    3) А зовнішня функція має віддати цей самий текст через CORBA::string_dup().

    Отака-ось платня за зручності цивілізації.

    ОтветитьУдалить
  2. Анонимный20 июня 2010 г., 22:42

    "GCC 2.95.2 компилятор выдаёт невнятное сообщение" а що за сообщєніє? ну типу щоб ми потім всі зразу знали що воно таке

    ОтветитьУдалить
  3. "а що за сообщєніє?"
    glibc detected *** malloc/free/calloc() memory corruption ... в различных вариантах. Возникает при компиляции функций, в которых используется трюк, описанный в посте.

    ОтветитьУдалить