-1

gcc(GCC)4.7.0 c89

私は以下を使用してメモリを割り当てています:

db_data_size = 32;
db->db_data[i]->name = malloc(db_data_size);

(gdb) p db_data_size
$24 = 32
(gdb) p sizeof(db->db_data[i]->name)
$25 = 8
(gdb) n
205   db->db_data[i]->email = malloc(db_data_size);
(gdb) p sizeof(db->db_data[i]->name)
$26 = 8

デバッガーでは、割り当てられるべきだったと思う32バイトではなく8バイトを取得します。

私の構造は次のとおりです。

struct data {
    int id;
    int set;
    char *name;
    char *email;
};

struct database {
    struct data **db_data;
    size_t database_rows;
    size_t database_data_size;
};

私が考えることができる唯一の考えは、char *が8バイトであり、それが私が得ているものであるということです。ただし、mallocでは、明示的に32バイトを要求しました。

4

2 に答える 2

5
sizeof(db->db_data[i]->name)

のサイズを教えてくれます

char *name;

これは (char への) ポインターのサイズです。割り当てられたブロックのサイズはわかりません。それを覚えておく必要がある場合は、別に保管する必要があります。

64 ビット システムのポインター8の正解も同様です。

于 2012-09-26T10:39:52.100 に答える
1

sizeofデータ型のサイズを与えるコンパイル時の演算子です。割り当てられたメモリ ブロックのサイズはわかりませんが、代わりに のサイズが表示さchar*れます。これは、64 ビット システムでは 8 バイトです。

割り当てられたブロックのサイズを追跡するのはあなた次第です。

于 2012-09-26T10:41:38.560 に答える