malloc没有分配正确的字节数

时间:2012-09-26 10:37:31

标签: c malloc

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个字节。

2 个答案:

答案 0 :(得分:5)

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

告诉你

的大小
char *name;

是指针的大小(对char)。它没有告诉你分配块的大小;如果你需要记住它,你必须单独存储它。

因此8是64位系统上指针的正确答案。

答案 1 :(得分:1)

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

由您来跟踪已分配块的大小。