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 个字节。
sizeof(db->db_data[i]->name)
告诉你的大小
char *name;
这是指针的大小(到字符)。它不会告诉您分配块的大小;如果您需要记住这一点,则必须单独存储它。
因此8
64 位系统上指针的正确答案。
>sizeof
是一个编译时运算符,它给出了数据类型的大小。它不会告诉您分配的内存块的大小,而是告诉您char*
的大小,在您的 64 位系统上为 8 字节。
您来跟踪分配块的大小。