/* Generate a random address inside a valid marked heap object. */ GC_API void * GC_CALL GC_generate_random_valid_address(void) { ptr_t result; ptr_t base; do { result = GC_generate_random_heap_address(); base = GC_base(result); } while (base == 0 || !GC_is_marked(base)); return result; }
/* Generate a random address inside a valid marked heap object. */ void *GC_generate_random_valid_address(void) { ptr_t result; ptr_t base; for (;;) { result = GC_generate_random_heap_address(); base = GC_base(result); if (0 == base) continue; if (!GC_is_marked(base)) continue; return result; } }