是否有可能在free()之后调用malloc()返回指向同一个释放内存的指针?

时间:2015-08-05 02:32:58

标签: c operating-system

我正在编写一个连续运行的应用程序while(1)并等待中断(基本上是RING)来解码消息。因此,当我成功解码消息时,我只需要打印它并开始等待另一个中断(一条新消息)。

我想在开始新消息之前清除所有数据结构。所以我只是释放指针,然后将它们放回去。但是当我这样做时,数据结构中仍然有一些字段包含旧数据。所以我只是使用calloc()来清除所有内存以清除旧数据。

我知道通过调用free释放的内存不会立即返回到操作系统,它仍然位于可用内存池中,但是malloc可以返回相同的已释放内存吗?

if(res){                               // If decoded successfully
        display_CID_info(cs, cs_data); // Display CallerID message
        free(cs);                      // Free the CID data structure
        free(cs_data);                 // Free message data structure

        /* Allocate Data structures again for next iteration */
        cs_data = malloc(sizeof(cid_data));
        cs = calloc(1, sizeof(*cid));
    }

1 个答案:

答案 0 :(得分:3)

是的,这完全有可能。当您调用free时,内存管理器会将该部分内存标记为片段,可能将其与相邻片段组合,但不会将数据设置为全零。 malloc()函数也不会将所有数据都设置为全零。

例如,如果您的程序中第一次调用free()并且紧跟一个malloc()以获得相同或更少的内存,则完全有可能内存管理器将重用旧片段。