我定义了这个函数:
struct heap_validation {
size_t num_alloc;
size_t num_alloc_sz;
struct memory *mem;
};
...
bool get_isallocated(struct metadata_record *);
字符串
当我从hashtable_traverse调用heap_validation函数并打印结果时,我得到了以下值:0,255,246
void hashtable_traverse(struct metadata_record *metarec,
struct heap_validation *heap_val) {
printf("get_isallocated(metarec): %d\n",get_isallocated(metarec));
bool retrieved = false;
bool allocated = get_isallocated(metarec);
if (allocated) {
heap_val->num_alloc += 1;
型
我也试了%d,得到了同样的结果。
4条答案
按热度按时间gr8qqesn1#
如果不包含
<stdbool.h>
,则不能保证bool
就是_Bool
。在C++(§4.5/4)中,当一个值被转换为
bool
时,它将变成0或1:bool类型的右值可以转换为int类型的右值,false变为0,true变为1。
在C(§6.3.1.2/1)中,当一个值被转换为_Bool时,它会变成0或1:
当任何标量值转换为_Bool时,如果该值比较等于0,则结果为0;否则,结果为1。
如果你得到的是0和1以外的值,那么
bool
不是_Bool
,get_isallocated()
返回的是0或1以外的值:字符串
将打印出
x=1
。q9yhzks02#
事实证明,函数**
hashtable_traverse
(由 *GLib的 *g_hash_table_foreach()
调用,以在 GHashTable 上进行遍历)需要key和value**。我只有值和指向用户数据的指针。
metarec
是值。*key应为地址指针(第一个参数),
heap_val
为用户数据,在g_hash_table_foreach()
中为可选41zrol4v3#
如果我理解正确的话,那么你可能想要布尔输出:
字符串
或
型
它将输出
0
或1
。ozxc1zmp4#
您应该从
stdbool.h
bool
类型中获取值0
或1
。如果不是这样,要么是你的程序(可能是
get_isallocated
函数)调用了未定义的行为,要么你没有使用stdbool.h
的bool
,而是使用了另一个标准整数类型的别名。