有什么方法可以测试询问过程是否分配了地址

时间:2019-03-21 23:20:52

标签: c memory-management error-handling

示例:

void *a = malloc(4);

...

free(a);

...
*a = 5;

例如,在c中,是否可以使用某种系统调用或某种方法来捕获此错误? (假设已将其设置为只能在运行时检查)

if(isalloc (a))可能是

我想知道,因为c ++已经以某种方式弄清楚了,除了它们引入了异常。这可以在c中完成吗?也许存在一个简单的函数,但我找不到它。

2 个答案:

答案 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);