Что такое Fresh Storage в Splint?

Я искал в документации Splint термин «свежее хранилище» и нашел упоминание об этом, но не нашел формального определения. Другие модификаторы, такие как null или only, я понимаю и использую. Я просто не уверен, что такое свежее хранилище.

Ситуация такова:

void output_system_information(unsigned int frequency, unsigned int duration) { 

   unsigned int intervals = duration/frequency;                                  

   /* here I allocate some storage */                                                                              
   System * my_system = malloc(sizeof(System));                                  

   SystemInfo* current, * total;                                                 

   if (my_system == NULL) {                                                      
     fprintf(stderr, "%s\n", "Aborting: failed malloc in output_system_informatioin");
     exit(EXIT_FAILURE);                                                         
   }                                                                             

   /* and here I initialize is in that function */                                              
   init_system(my_system);      
   total = tally_system_info(frequency, duration, my_system);                    
   current = my_system->get_system_info();                                       

   /* Here I've removed a ton of print-line statements so that you don't have to see them */

   /* then the members and the struct get freed in this here dtor */
   delete_system(my_system);                                                     
   free(current);                                                                
   free(total);                                                                  

   return;                                                                       
}            

Это домашнее задание, но этот вопрос не имеет прямого отношения к домашнему заданию. Это вопрос о шпильке.


person Ziggy    schedule 30.01.2012    source источник


Ответы (1)


Термин свежее хранилище относится к буферу памяти, который был только что выделен для вашей программы.

Предупреждение "Свежая память не освобождена" является частным случаем "Только память не освобождена", когда буфер выделяется той же функцией, которая не может его освободить.

person Guillermo Calvo    schedule 30.01.2012
comment
Откуда ты это знаешь? Можно ссылку на отрывок? Просто я просмотрел руководство Splint и не нашел такого определения. Может быть, мне просто нужно проверить еще раз... - person Ziggy; 04.02.2012
comment
Здесь вы можете прочитать о отсылках без общего доступа. Я думаю, что пример довольно прост и не требует пояснений. Splint выдает сообщение Свежая память не освобождается перед возвратом, потому что Свежая память была выделена в этой строке: int *m = (int *)malloc (sizeof (int)); - person Guillermo Calvo; 05.02.2012
comment
Splint также определяет Ошибку передачи fresh-trans как: Вновь выделенное хранилище переносится не только на ссылку (утечка памяти). - person Guillermo Calvo; 05.02.2012