malloc関数とnew演算子

C++言語の勉強する前にC言語はできる人が多いらしい。
C++言語はCにの互換性はいい。

C++にC言語のmallocのようなものがあります。それはnew演算子だ。
似てるけど不同があります。特にメモリが不足の時。

会社の同僚はまだ「new演算子を使ってメモリが不足の時ゼロ値を返す」と思ってる。
malloc関数こそゼロ値を返すじゃないか><

同僚は書いたコードがこのようです


char* buffer = new char[bufsize];
if(!buffer) {
...
実はnew演算子はメモリが不足の時、ゼロ値を返さない。代わりに例外を起こる。

多くの資料にこれを載ってるのに知らない人がまだ多いらしい
C言語の習慣のせいか

試してわかる。

その一


#include
int main() {
while(std::malloc(104857600)!=0);
return 0;
}
正常終了。
そのニ

int main() {
while(new char[104857600]!=0);
return 0;
}
クラッシュ

これでわかる?

new演算子はメモリが不足の時std::bad_alloc例外が起こる。ゼロ値を返さない

ボーナストラック


#include
int main() {
while(new(std::nothrow) char[104857600]!=0);
return 0;
}
1と同じです。