免费可以说,我已经在节目动态内存分配和使用C
char* s = malloc(sizeof(char) * 128);
创建一个字符串动态,我们开始使用年代以前,如何检查内存是否被分配或不?
free(s);
在使用free()之前,我想检查是否还有其他指向s的指针。
免费可以说,我已经在节目动态内存分配和使用C
char* s = malloc(sizeof(char) * 128);
创建一个字符串动态,我们开始使用年代以前,如何检查内存是否被分配或不?
free(s);
在使用free()之前,我想检查是否还有其他指向s的指针。
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
点,如果你(程序员)创造了他们其它指针。
'char * q = s',您将有两个指向同一位置的指针。 :) – 2011-03-02 19:42:09
malloc
的规格说,它将返回NULL
失败。所以如果malloc
不返回NULL
那么你可以依靠编译器来分配内存。不幸的是,没有标准的方法来判断是否有其他指针指向相同的内存。所以在free
之前,你需要确保自己是一个程序员,不需要内存。
而且使用免费()之前,我想 检查是否有任何其他指针 指向秒。
一般来说,你不能这样做 - 你必须要管理什么其他所有指针都在做自己。
一个常见的帮手是在释放它之后将's'设置为NULL,那么您至少可以检测's'是否仍然在其他函数中使用,但是您不能自动检查' S'。
我经常创建一个“聪明自由”的宏来做到这一点。它调用'free',然后将指针设置为NULL。它适用于全局可访问的指针,但如果你已经制作了一堆指针副本,它将无济于事。 – bta 2011-03-02 19:37:38
你应该做的第一件事就是从你的C词汇表中删除'sizeof(char)'。这是一种非常丑陋的方式来编写'1',在阅读你的代码的任何人的脑海中引发一个警报。 – 2011-03-02 20:42:46