动态内存分配和C中的空闲

时间:2011-03-02 19:22:17

标签: c

假设我已经在程序中动态创建了一个字符串

char* s = malloc(sizeof(char) * 128);

在我们开始使用s之前,如何检查内存是否已分配?

free(s);

在使用free()之前,我想检查是否有其他指针指向s。

3 个答案:

答案 0 :(得分:7)

malloc()返回指向新分配的内存的指针或NULL。

所以检查NULL

char *s = malloc(128); /* sizeof (char), by definition, is 1 */
if (s == NULL) {
    /* no memory allocated */
} else {
    /* use memory */
    free(s);
}

只有当你(程序员)创建它们时,还有其他指针指向s指向的位置。

答案 1 :(得分:1)

  

在使用free()之前,我想   检查有没有其他指针   指着s。

一般情况下,你不能这样做 - 你必须管理所有其他指针正在做的事情。

一个常见的助手是在释放后将's'设置为NULL,然后你至少可以检测你的其他功能是否还在使用's',但是你不能自动检查's'的任何副本”。

答案 2 :(得分:0)

malloc的规范说它会在失败时返回NULL。因此,如果malloc没有返回NULL,那么您可以依赖编译器分配内存。不幸的是,没有标准的方法来判断是否有任何其他指针指向同一个内存。因此,在free之前,您需要确保自己是程序员,而不需要内存。