我正在编写一个小型数据库管理器,但是我在做类似VARCHAR类型的操作时遇到了麻烦。
它应该是这样的:我有一个3位数字,说“RPG”,它应该分配足够的大小来放置RPG \ 0。
发生了什么:如果我使用new,malloc(3),malloc(1),malloc(sizeof(char)*“RPG”.size())并不重要,我总是可以在内存中使用更大的区域。我尝试用malloc_size()检查它,它总是返回16。
我怎样才能做一些能够分配足够空间的东西?
编辑:
没有特定的代码,我正在尝试解决问题并尝试如何制作不同大小的字符,但它会是这样的:
char * myChar1 = (char*)malloc(sizeof(unsigned short int));
size_t howManyBytes = malloc_size(myChar1);
cout << "howManyBytes: " << howManyBytes << " bytes" << ends; //should say 2, instead it says 16
strcpy(myChar1,"HELLO HOW ARE YOU"); //shouldn't write the entire sentence as its bigger than 2 bytes
cout << "MYCHAR1: " << myChar1 << endl; //string
cout << "&MYCHAR1: " << &myChar1 << endl; //adress
cout << "*MYCHAR1: " << *myChar1 << endl; //first letter
答案 0 :(得分:1)
看起来你在64位系统上,所以系统在16字节边界上分配内存块,所以你得到的数据分配为16的倍数。因为分配的每个块必须从一个地址开始16的倍数,如果它只给你4个字节,那么另外12个将无法使用,因为分配的块不能在12字节段的开头开始。