2011-03-02 122 views
2

免费可以说,我已经在节目动态内存分配和使用C

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

创建一个字符串动态,我们开始使用年代以前,如何检查内存是否被分配或不?

free(s); 

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

+0

你应该做的第一件事就是从你的C词汇表中删除'sizeof(char)'。这是一种非常丑陋的方式来编写'1',在阅读你的代码的任何人的脑海中引发一个警报。 – 2011-03-02 20:42:46

回答

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点,如果你(程序员)创造了他们其它指针。

+0

'char * q = s',您将有两个指向同一位置的指针。 :) – 2011-03-02 19:42:09

0

malloc的规格说,它将返回NULL失败。所以如果malloc不返回NULL那么你可以依靠编译器来分配内存。不幸的是,没有标准的方法来判断是否有其他指针指向相同的内存。所以在free之前,你需要确保自己是一个程序员,不需要内存。

1

而且使用免费()之前,我想 检查是否有任何其他指针 指向秒。

一般来说,你不能这样做 - 你必须要管理什么其他所有指针都在做自己。

一个常见的帮手是在释放它之后将's'设置为NULL,那么您至少可以检测's'是否仍然在其他函数中使用,但是您不能自动检查' S'。

+0

我经常创建一个“聪明自由”的宏来做到这一点。它调用'free',然后将指针设置为NULL。它适用于全局可访问的指针,但如果你已经制作了一堆指针副本,它将无济于事。 – bta 2011-03-02 19:37:38