【发布时间】:2019-08-12 21:53:14
【问题描述】:
例子:
void *a = malloc(4);
...
free(a);
...
*a = 5;
例如,在 c 中,有没有办法使用某种系统调用或其他东西来捕捉这个错误? (假设这是设置为只能在运行时检查)
if(isalloc (a)) 可能吗?
我想知道,因为 c++ 已经以某种方式解决了这个问题,除了它们有例外。这可以在 c 中完成吗?也许存在一个简单的函数,但我找不到它。
【问题讨论】:
-
because c++ has figured it out somehow?如何?未定义的行为就是未定义的行为,你无能为力。 -
跟踪分配的内存真的那么难吗?
-
不,不可能
-
@KamilCuk stackoverflow.com/questions/7749066/… 展示了您如何在 C++ 中执行此操作,由于存在此问题,我想知道是否可以仅使用地址或是否需要跟踪器或其他东西来执行此操作,如果有人已经这样做了。那种东西。
-
不,你不能,除非你替换 malloc() 和 free() (以及所有其他 *alloc() 函数) - 函数并跟踪已分配的内存块。顺便说一句,有些工具可以做到这一点 - valgrind,例如在 C++ 中,您可以提供自己的分配器,恕我直言。但不幸的是,我对 C++ 并没有那么深...
标签: c memory-management error-handling