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
Run Code Online (Sandbox Code Playgroud)
在调试器中,我得到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;
};
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一想法是char*是8个字节,这就是我得到的.但是,在malloc中我明确要求32个字节.
sizeof(db->db_data[i]->name)
Run Code Online (Sandbox Code Playgroud)
告诉你的大小
char *name;
Run Code Online (Sandbox Code Playgroud)
这是指针的大小(对char).它没有告诉你分配块的大小; 如果你需要记住它,你必须单独存储它.
8对64位系统上的指针的正确答案也是如此.