有没有办法测试询问过程是否已分配地址

问题描述 投票:2回答:2

例:

void *a = malloc(4);

...

free(a);

...
*a = 5;

例如,有没有一种方法可以使用某种系统调用来捕获此错误? (假设设置为只能在运行时检查)

if(isalloc (a))可能吗?

我想知道因为c ++已经以某种方式弄明白了,除非他们有异常。这可以在c中完成吗?也许存在一个简单的函数,但我找不到它。

c memory-management error-handling
2个回答
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));
}

-2
投票

malloc函数不是函数调用。它是一个库函数,它调用系统函数brk或sbrk来在堆中分配内存。

所有进程都具有有限的内存量(虚拟化内存)。如果超出限制,则会出现分段错误。在这种情况下,malloc返回NULL。因此,当您尝试在堆中分配内存时,请检查malloc是否已返回NULL。

void *m = malloc(4);

if (m == NULL)
    exit(1);

free(m);
© www.soinside.com 2019 - 2024. All rights reserved.