0

I have this function defined:

struct heap_validation {
    size_t num_alloc;
    size_t num_alloc_sz;
    struct memory *mem;
};
...
bool get_isallocated(struct metadata_record *);

When I call the heap_validation function from hashtable_traverse and print the result, I've gotten the following values: 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;

I also tried with %d and I get the same result.

4

4 に答える 4

1

含めない場合は<stdbool.h>boolであるとは限りません_Bool

C++ (§4.5/4) では、値が に変換されるboolと、0 または 1 になります。

bool 型の右辺値は、int 型の右辺値に変換できます。false はゼロになり、true は 1 になります。

C (§6.3.1.2/1) では、値が _Bool に変換されると、0 または 1 になります。

スカラー値が _Bool に変換されるとき、値が 0 と等しい場合、結果は 0 です。それ以外の場合、結果は 1 です。

0 と 1 以外の値を取得している場合は、そうでboolはなく_Boolget_isallocated()0 または 1 以外の値を返しています。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
  _Bool x=69;
  printf("x=%d\n",x);
  exit(EXIT_SUCCESS);
}

印刷されx=1ます。

于 2012-10-02T21:52:57.220 に答える
0

If I am understanding you correct,then perhaps you want boolean output:-

printf("get_isallocated(metarec): %d\n",get_isallocated(metarec)!=0);

or

printf("get_isallocated(metarec): %s\n",get_isallocated(metarec)!=0?"True":"False"); 

It will output a 0 or 1 .

于 2012-10-02T21:27:50.097 に答える
0

0またはタイプ1から取得する必要があります。stdbool.h bool

そうでない場合は、プログラム (おそらくget_isallocated関数) が未定義の動作を呼び出しているか、boolfromstdbool.hではなく別の標準整数型へのエイリアスを使用しています。

于 2012-10-02T21:51:30.620 に答える
0

関数「hashtable_traverse」は、GLib の g_hash_table_foreach() によって GHashTable を反復処理するために呼び出される関数であり、キーと値の両方を想定していることがわかりました。値とユーザー データへのポインターしかありませんでした。

metarec は値、キーはアドレス ポインター (第 1 パラメーター)、heap_val は g_hash_table_foreach() でオプションのユーザー データです。

于 2012-10-02T23:34:37.777 に答える