-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

在调试器中,我得到了 8 个字节,而不是我认为应该分配的 32 个字节。

我的结构是:

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;

这是指针(指向字符)的大小。它不会告诉您分配块的大小;如果您需要记住这一点,则必须单独存放。

864 位系统上指针的正确答案也是如此。

于 2012-09-26T10:39:52.100 回答
1

sizeof是一个编译时运算符,它给出了数据类型的大小。它不会告诉您分配的内存块的大小,而是告诉您 a 的大小,char*在您的 64 位系统上是 8 个字节。

跟踪分配块的大小由您决定。

于 2012-09-26T10:41:38.560 回答