Есть ли способ проверки, если в процессе запроса был выделен адрес - PullRequest
2 голосов
/ 22 марта 2019

Пример:

void *a = malloc(4);

...

free(a);

...
*a = 5;

Например, в c есть способ отловить эту ошибку, используя какой-то системный вызов или что-то в этом роде? (при условии, что это настроено так, что его можно проверить только во время выполнения)

if(isalloc (a)) может быть?

Мне интересно, потому что с ++ как-то это выяснил, за исключением того, что у них есть встроенные исключения. Можно ли это сделать в c? Возможно, существует простая функция, но я не могу ее найти.

1 Ответ

1 голос
/ 22 марта 2019

Вы можете создать такой объект самостоятельно.

#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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...