示例:
void *a = malloc(4);
...
free(a);
...
*a = 5;
例如,在c中,是否可以使用某种系统调用或某种方法来捕获此错误? (假设已将其设置为只能在运行时检查)
if(isalloc (a))
可能是
我想知道,因为c ++已经以某种方式弄清楚了,除了它们引入了异常。这可以在c中完成吗?也许存在一个简单的函数,但我找不到它。
答案 0 :(得分:1)
您可以自己创建这样的设施。
#include <stdlib.h>
#include <stdio.h>
char _unallocated[] = "";
#define free(p) free(p); p = _unallocated
#define isalloc(p) (p && p != _unallocated)
int main() {
void* a = _unallocated;
printf("%d\n", isalloc(a));
a = malloc(4);
printf("%d\n", isalloc(a));
free(a);
printf("%d\n", isalloc(a));
}
答案 1 :(得分:-2)
malloc 函数不是函数调用。这是一个库函数,它调用系统函数 brk 或 sbrk 在堆中分配内存。
所有进程的内存(虚拟内存)数量有限。如果超过限制,则会出现细分错误。在这种情况下, malloc 返回NULL。因此,当您尝试在堆中分配内存时,请检查 malloc 是否返回NULL。
void *m = malloc(4);
if (m == NULL)
exit(1);
free(m);