Він не має можливості викликати конструктори об’єктів. Якщо ви використовуєте C++, оскільки це робить malloc непридатним для об’єктів. Тож замість цього ви використовуєте новий. malloc повертає нуль, якщо пам’ять не може бути виділена, що означає, що ви повинні перевірити значення, що повертається, усюди, тоді як new викличе виняток.
Перший виклик malloc буде пошкоджено другим, і в результаті програма, ймовірно, аварійно завершить роботу або поведе себе несподіваним чином пізніше., що ускладнює виявлення першопричини проблеми. Короткий опис проблем: newlib/malloc не є потоково безпечним.
Висновок. Хороший API запитує всю необхідну інформацію (дух) і повертає стільки інформації, яку він може надати (закон корисного повернення). malloc() і free() не дотримуються цих принципів, що робить їх менш корисними, якими вони могли б бути.
malloc, calloc і free застаріли з C++11.
по-перше, malloc насправді може вийти з ладу, не тому, що йому не вистачає пам’яті, а тому, що у нього не вистачає адресного простору. Якщо у вашому адресному просторі вже є 2^64 байти пам’яті (я вважаю, що 2^48 на більшості практичних машин), тоді malloc не зможе повернути значення, яке б вас задовольнило.