PetscPoisonMemoryRegion#
Poison a region in memory, making it undereferencable
Synopsis#
static inline PetscErrorCode PetscPoisonMemoryRegion(const void *ptr, size_t size)
Not Available From Fortran
Input Parameters#
- ptr - The pointer to the start of the region 
- size - The size (in bytes) of the region to poison 
Notes#
ptr must not be NULL. It is OK to poison the same memory region repeatedly (it is a
no-op).
Any attempt to dereference the region after this routine returns results in an error being
raised. The memory region may be un-poisoned using PetscUnpoisonMemoryRegion(), making it
safe to dereference again.
Example Usage#
  PetscInt *array;
  PetscMalloc1(15, &array);
  // OK, memory is normal
  array[0] = 10;
  array[1] = 15;
  PetscPoisonMemoryRegion(array, 15 * sizeof(*array));
  // ERROR this region is poisoned!
  array[0] = 10;
  // ERROR reading is not allowed either!
  PetscInt v = array[15];
  // OK can re-poison the region
  PetscPoisonMemoryRegion(array, 15 * sizeof(*array));
  // OK can re-poison any subregion too
  PetscPoisonMemoryRegion(array + 5, 1 * sizeof(*array));
  PetscUnpoisonMemoryRegion(array, 1 * sizeof(*array));
  // OK the first entry has been unpoisoned
  array[0] = 10;
  // ERROR the rest of the region is still poisoned!
  array[1] = 12345;
  PetscUnpoisonMemoryRegion(array + 10, sizeof(*array));
  // OK this region is unpoisoned (even though surrounding memory is still poisoned!)
  array[10] = 0;
  PetscInt stack_array[10];
  // OK can poison stack memory as well
  PetscPoisonMemoryRegion(stack_array, 10 * sizeof(*stack_array));
  // ERROR stack array is poisoned!
  stack_array[0] = 10;
See Also#
Level#
developer
Location#
include/petsc/private/mempoison.h
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages