例:

void *a = malloc(4);

...

free(a);

...
*a = 5;

例如在c语言中,有没有一种使用某种系统调用或某种方法捕获此错误的方法? (假设设置为只能在运行时检查)
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));
}

07-26 07:05