首页 > 解决方案 > 是否有任何方法可以测试询问过程是否已分配地址

问题描述

例子:

void *a = malloc(4);

...

free(a);

...
*a = 5;

例如,在 c 中,有没有办法使用某种系统调用或其他东西来捕捉这个错误?(假设这是设置为只能在运行时检查)

if(isalloc (a))也许?

我想知道,因为c ++已经以某种方式解决了这个问题,除了它们有例外。这可以在c中完成吗?也许存在一个简单的功能,但我找不到。

标签: cmemory-managementerror-handling

解决方案


您可以自己创建这样的设施。

#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));
}

推荐阅读