C 有没有办法测试询问流程是否分配了地址

C 有没有办法测试询问流程是否分配了地址,c,memory-management,error-handling,C,Memory Management,Error Handling,例如: void *a = malloc(4); ... free(a); ... *a = 5; 例如,在c语言中,是否有一种方法可以使用某种系统调用或其他方法捕获此错误?(假设设置为只能在运行时检查) 如果(isalloc(a))可能吗 我想知道C++是怎么解决的,除非它们有例外。这可以用c语言完成吗?可能存在一个简单的函数,但我找不到它。您可以自己创建这样的函数 #include <stdlib.h> #include <stdio.h> char _un

例如:

void *a = malloc(4);

...

free(a);

...
*a = 5;
例如,在c语言中,是否有一种方法可以使用某种系统调用或其他方法捕获此错误?(假设设置为只能在运行时检查)

如果(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));
}
#包括
#包括
字符_未分配[]=“”;
#定义自由(p)自由(p);p=_未分配
#定义isalloc(p)(p&p!=\u未分配)
int main(){
void*a=未分配;
printf(“%d\n”,isalloc(a));
a=malloc(4);
printf(“%d\n”,isalloc(a));
免费(a);
printf(“%d\n”,isalloc(a));
}

<代码>代码>因为C++已经不知何故了吗?怎么用?未定义的行为就是未定义的行为,你无能为力。跟踪分配的内存真的有那么难吗?不,不是possible@KamilCuk演示如何在C++中实现这一点,因为它存在,我想知道是否有可能只用地址就可以做到这一点,或者是否需要一个跟踪器或其他东西,是否有人已经这样做了。诸如此类。不,除非替换malloc()和free()(以及所有其他*alloc()-函数)-函数并跟踪已分配的内存块,否则不能。顺便说一下,有一些工具可以精确地做,比如ValGReND,例如C++,你可以提供你自己的分配器,IHOO。但不幸的是,我不是那么深入C++…