假设我已经在程序中动态创建了一个字符串
char* s = malloc(sizeof(char) * 128);
在我们开始使用s之前,如何检查内存是否已分配?
free(s);
在使用free()之前,我想检查是否有其他指针指向s。
答案 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
之前,您需要确保自己是程序员,而不需要内存。