2015-11-10 78 views
-1

我正在寫一個小型的數據庫管理器,但我在做類似VARCHAR類型的事情時遇到了問題。C++試圖做某種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 
+2

你能否提供你的代碼? – Sigstop

+0

無代碼。但是,我已經可以告訴你的是,你命名的所有*選項('new'和'malloc')幾乎肯定是這個工作的錯誤工具。 –

+0

我以爲它不需要代碼,我用我最後一次嘗試編輯,謝謝 –

回答

1

看起來你在64位系統上,所以系統在16字節的邊界上分配內存塊,因此你得到的數據是以16的倍數分配的。因爲每個分配的塊都必須從一個地址開始, 16,如果它只給你4個字節,其他12個無法使用,因爲分配的塊可以不是從12字節段的開始處開始。