【问题标题】:Is there any way of testing if the asking process has allocated an address是否有任何方法可以测试询问过程是否已分配地址
【发布时间】: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


【解决方案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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2016-08-18
    • 2011-09-10
    • 1970-01-01
    相关资源
    最近更新 更多