такой код:
                  
                  
                  void myFunction()
                  
                  
                  {
                  
                  
                      unsigned char *ptr = malloc(16); // аллоцируем память в куче
                  
                  
                      ptr[0] = 1;
                  
                  
                      ptr[7] = 8;
                  
                  
                      ptr[8] = 255;
                  
                  
                      ptr[15] = 255;
                  
                  
                  
                  
                  
                      free(ptr); // возвращаем память.
                  
                  
                      // При этом очищаются только первые 8 байт памяти;
                  
                  
                      // Вторые 8 байт памяти остаются не тронутыми.
                  
                  
                  }
                  
                  
                  
                  
                  
                  Когда дело доходит до освобождения, то в памяти очищаются только первые 8 байт, а остальные - нет.
                  
                  
                  Если до освобождения было:
                  
                  
                  01 00 00 00   00 00 00 08   ff 00 00 00   00 00 00 ff
                  
                  
                  То после:
                  
                  
                  00 00 00 00   00 00 00 00   ff 00 00 00   00 00 00 ff
                  
                  
                  
                  
                  
                  Оно должно так быть?
                  
                  
                
free - освобождает участок памяти под последующее использование, но не "обнуляет" ее, а вот обращение к памяти после free - ub
Обсуждают сегодня