私はmallocで約128バイトのメモリを割り当てます。Reallocはnullを返しますか?
その後、私は約200バイトでreallocを呼び出しますが、nullを返しています!
フリーであれば有効なポインタを返し、次に別のmallocを返しますが、reallocを使いたいと思います。
この動作(私は明らかにメモリが不足していません)について説明できますか?これは有効な行動ですか?
コードビット:
//class constructor
size = 0;
sizeAllocated = DEFAULT_BUFFER_SIZE; //64
data = (char*)malloc(sizeAllocated * sizeof(char)); //data is valid ptr now, I've checked it
data[0] = '\0';
//later on:
//append function
bool append(char** data, const char* str, size_t strLen) {
if((size + strLen) >= sizeAllocated) {
sizeAllocated += strLen + 1 + BUFFER_ALLOCATION_STEP;
char* temp = realloc(*data, sizeAllocated * sizeof(char));
if(temp)
*data = temp;
return(temp != NULL);
}
EDIT:固定。私は< <演算子を自分のクラスにオーバーロードしていましたが、voidの代わりに*これを返しました。どういうわけかこれはすべてをねじっていた!なぜ誰がこのことが起こるのか説明できるなら、それはいいだろう!
たくさん割り当て/割り当て解除していますか?ヒープの断片化を引き起こし、連続したメモリを制限する可能性があります。あなたは無料で200bを見つけることができないだろうとは思わないが。 –
私はかなり小さいものを割り当てます - これはmain(){}の中に最初に置かれたとしても失敗します – Pubby
valgrindの仕事のようです。 – bmargulies