Содержимое памяти, возвращаемое malloc
, не инициализировано. Вы не можете читать из этой памяти до того, как инициализируете ее (записав в нее хотя бы один раз).
gcc может «услужливо» инициализировать память нулем, но такое поведение не требуется. Visual C ++ C Runtime (CRT) предоставит вам неинициализированную память в сборке выпуска (для максимальной производительности) и память, инициализированную специальным байтом заполнения 0xcd
в сборке отладки (чтобы помочь вам найти, где вы можете использовать неинициализированную память) .
Итак, в основном вам нужно инициализировать память перед ее использованием. Если вы хотите, чтобы среда выполнения инициализировала блок кучи до нуля до того, как он вам его даст, вы можете использовать calloc
.