malloc関数とnew演算子
C++言語の勉強する前にC言語はできる人が多いらしい。
C++言語はCにの互換性はいい。
C++にC言語のmallocのようなものがあります。それはnew演算子だ。
似てるけど不同があります。特にメモリが不足の時。
会社の同僚はまだ「new演算子を使ってメモリが不足の時ゼロ値を返す」と思ってる。
malloc関数こそゼロ値を返すじゃないか><
同僚は書いたコードがこのようです
実はnew演算子はメモリが不足の時、ゼロ値を返さない。代わりに例外を起こる。
char* buffer = new char[bufsize];
if(!buffer) {
...
多くの資料にこれを載ってるのに知らない人がまだ多いらしい
C言語の習慣のせいか
試してわかる。
その一
正常終了。
#include
int main() {
while(std::malloc(104857600)!=0);
return 0;
}
そのニ
クラッシュ
int main() {
while(new char[104857600]!=0);
return 0;
}
これでわかる?
new演算子はメモリが不足の時std::bad_alloc例外が起こる。ゼロ値を返さない
ボーナストラック
1と同じです。
#include
int main() {
while(new(std::nothrow) char[104857600]!=0);
return 0;
}