例:
void *a = malloc(4);
...
free(a);
...
*a = 5;
例如,有没有一种方法可以使用某种系统调用来捕获此错误? (假设设置为只能在运行时检查)
if(isalloc (a))
可能吗?
我想知道因为c ++已经以某种方式弄明白了,除非他们有异常。这可以在c中完成吗?也许存在一个简单的函数,但我找不到它。
您可以自己创建这样的设施。
#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));
}
malloc函数不是函数调用。它是一个库函数,它调用系统函数brk或sbrk来在堆中分配内存。
所有进程都具有有限的内存量(虚拟化内存)。如果超出限制,则会出现分段错误。在这种情况下,malloc返回NULL。因此,当您尝试在堆中分配内存时,请检查malloc是否已返回NULL。
void *m = malloc(4);
if (m == NULL)
exit(1);
free(m);